파일 클립을 재생하는 방법

[이 페이지와 연결된 기능인 MFPlay는 레거시 기능입니다. 그것은 MediaPlayerIMFMediaEngine에 의해 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11에 최적화되었습니다. 가능한 경우 새 코드에서 DirectShow 대신 MediaPlayerIMFMediaEngine을 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용한 기존 코드를 다시 작성하여 새 API를 사용하는 것을 추천합니다.]

이 항목에서는 재생의 시작 및 중지 시간을 설정하여 MFPlay에서 미디어 파일의 세그먼트를 재생하는 방법에 대해 설명합니다.

파일 클립을 재생하려면

  1. IMFPMediaPlayer::CreateMediaItemFromURL 또는 IMFPMediaPlayer::CreateMediaItemFromObject를 호출하여 파일에 대한 미디어 항목을 만듭니다.
  2. 필요에 따라 재생 기간을 가져오는 방법에 설명된 대로 파일의 총 기간을 가져옵니다.
  3. IMFPMediaItem::SetStartStopPosition을 호출하여 시작 및 중지 시간을 설정합니다. 중지 시간은 파일 기간을 초과하면 안됩니다.
  4. IMFPMediaPlayer::SetMediaItem을 호출하여 재생을 시작합니다.

다음 예제에서는 CreateMediaItemFromURL차단 버전을 사용합니다. 비차단 버전을 사용하는 경우 CreateMediaItemFromURL 이후에 나타나는 코드는 MFP_EVENT_TYPE_MEDIAITEM_CREATED 이벤트에 대한 처리기에 배치되어야 합니다. MFPlay의 이벤트에 대한 자세한 내용은 플레이어에서 이벤트 수신을 참조 하세요.

파일 기간을 가져오기 위해 이 예제에서는 재생 기간을 가져오는 방법 항목에 표시된 함수를 호출 GetPlaybackDuration 합니다.

HRESULT PlayMediaClip(
    IMFPMediaPlayer *pPlayer,
    PCWSTR pszURL,
    LONGLONG    hnsStart,
    LONGLONG    hnsEnd
    )
{
    IMFPMediaItem *pItem = NULL;
    PROPVARIANT varStart, varEnd;

    ULONGLONG hnsDuration = 0;

    HRESULT hr = pPlayer->CreateMediaItemFromURL(pszURL, TRUE, 0, &pItem);
    if (FAILED(hr))
    {
        goto done;
    }

    hr = GetPlaybackDuration(pItem, &hnsDuration);
    if (FAILED(hr))
    {
        goto done;
    }

    if ((ULONGLONG)hnsEnd > hnsDuration)
    {
        hnsEnd = hnsDuration;
    }

    hr = InitPropVariantFromInt64(hnsStart, &varStart);
    if (FAILED(hr))
    {
        goto done;
    }

    hr = InitPropVariantFromInt64(hnsEnd, &varEnd);
    if (FAILED(hr))
    {
        goto done;
    }

    hr = pItem->SetStartStopPosition(
        &MFP_POSITIONTYPE_100NS,
        &varStart,
        &MFP_POSITIONTYPE_100NS,
        &varEnd
        );
    if (FAILED(hr))
    {
        goto done;
    }

    hr = pPlayer->SetMediaItem(pItem);

done:
    SafeRelease(&pItem);
    return hr;
}

요구 사항

MFPlay에는 Windows 7이 필요합니다.

오디오/비디오 재생에 MFPlay 사용