如何播放文件剪辑

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

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

播放文件剪辑

  1. 调用 EMCPMediaPlayer::CreateMediaItemFromURLEMCPMediaPlayer::CreateMediaItemFromObject 为文件创建媒体项。
  2. (可选)获取文件的总持续时间,如如何获取播放 持续时间中所述
  3. 调用 "开始""媒体""Item::SetStartStopPosition" 以设置开始时间和停止时间。 停止时间不能超过文件持续时间。
  4. 调用 "10000001"以 开始播放。

以下示例使用 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 进行音频/视频播放