如何播放文件剪辑

[MFPlay 可用于“要求”部分中指定的操作系统。 它可能在后续版本中变更或不可用。 ]

本主题介绍如何通过设置播放的开始和停止时间,在 MFPlay 中播放媒体文件的片段。

播放文件剪辑

  1. 调用 IMFPMediaPlayer::CreateMediaItemFromURLIMFPMediaPlayer::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 播放音频/视频