Поделиться через


Как воспроизвести клип из файла

[Функция, связанная с этой страницей MFPlay, является устаревшей функцией. Он был заменен на MediaPlayer и IMFMediaEngine. Эти функции оптимизированы для Windows 10 и Windows 11. Корпорация Майкрософт настоятельно рекомендует использовать новый код MediaPlayer и IMFMediaEngine вместо DirectShow, когда это возможно. Корпорация Майкрософт предлагает, что существующий код, использующий устаревшие 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 для воспроизведения звука и видео