파일 시퀀스를 재생하는 방법
[이 페이지와 연결된 기능인 MFPlay는 레거시 기능입니다. 그것은 MediaPlayer와 IMFMediaEngine에 의해 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11에 최적화되었습니다. 가능한 경우 새 코드에서 DirectShow 대신 MediaPlayer 및 IMFMediaEngine을 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용한 기존 코드를 다시 작성하여 새 API를 사용하는 것을 추천합니다.]
이 항목에서는 MFPlay를 사용하여 오디오/비디오 파일 시퀀스를 재생하는 방법을 설명합니다.
MFPlay 시작 항목에서는 단일 미디어 파일을 재생하는 방법을 보여줍니다. MFPlay를 사용하여 파일 시퀀스를 재생할 수도 있습니다.
동기(차단) 메서드
- IMFPMediaPlayer::CreateMediaItemFromURL 메서드를 호출합니다. 이 메서드는 미디어 항목을 만듭니다.
- IMFPMediaPlayer::SetMediaItem을 호출하여 재생을 위해 미디어 항목을 큐에 대기합니다.
- IMFPMediaPlayer::P lay를 호출하여 재생을 시작합니다.
이러한 단계는 다음 코드에 나와 있습니다.
HRESULT OpenMediaFile(IMFPMediaPlayer *pPlayer, PCWSTR pwszURL)
{
HRESULT hr = S_OK;
IMFPMediaItem *pItem = NULL;
hr = pPlayer->CreateMediaItemFromURL(
sURL,
TRUE, // Blocking call
0, // User data.
&pItem
);
if (SUCCEEDED(hr))
{
hr = pPlayer->SetMediaItem(pItem);
}
if (SUCCEEDED(hr))
{
hr = pPlayer->Play();
}
if (pItem)
{
pItem->Release();
}
return hr;
}
CreateMediaItemFromURL 메서드는 다음 매개 변수를 사용합니다.
- 첫 번째 매개 변수는 파일의 URL입니다.
- 두 번째 매개 변수는 메서드가 차단되는지 여부를 지정합니다. 여기에 표시된 대로 TRUE 값을 지정하면 미디어 항목이 생성될 때까지 메서드가 차단됩니다.
- 세 번째 매개 변수는 임의의 DWORD_PTR 값을 미디어 항목과 연결합니다. 나중에 IMFPMediaItem::GetUserData를 호출하여 이 값을 가져올 수 있습니다.
- 네 번째 매개 변수는 미디어 항목의 IMFPMediaItem 인터페이스에 대한 포인터를 받습니다.
비동기(비차단) 메서드
UI 스레드에서 CreateMediaItemFromURL을 호출하는 경우 완료하는 데 상당한 시간이 걸릴 수 있으므로 차단 옵션을 사용하지 않습니다. 이 메서드는 일반적으로 파일 또는 네트워크 연결을 열고 파일 헤더를 구문 분석하기에 충분한 데이터를 읽습니다. 이 모든 작업은 시간이 걸릴 수 있습니다. 따라서 일반적으로 두 번째 매개 변수를 FALSE로 설정하는 것이 좋습니다. 이 옵션을 사용하면 메서드가 비동기적으로 수행됩니다. 비동기 옵션을 사용하는 경우 마지막 매개 변수는 NULL이어야 합니다.
hr = pPlayer->CreateMediaItemFromURL(
sURL,
FALSE, // Non-blocking call.
0, // User data.
NULL // Must be NULL for the non-blocking call.
);
미디어 항목이 만들어지면 애플리케이션은 MFP_EVENT_TYPE_MEDIAITEM_CREATED 이벤트를 받습니다. 이 이벤트의 데이터 구조에는 미디어 항목에 대한 포인터가 포함됩니다. SetMediaItem 메서드에 이 포인터를 전달하여 재생을 위해 항목을 큐에 추가합니다.
void OnMediaItemCreated(MFP_MEDIAITEM_CREATED_EVENT *pEvent)
{
HRESULT hr = S_OK;
if (FAILED(pEvent->header.hrEvent))
{
// Handle error. (Not shown.)
}
else
{
hr = g_pPlayer->SetMediaItem(pEvent->pMediaItem);
}
}
요구 사항
MFPlay에는 Windows 7이 필요합니다.
관련 항목