如何播放文件剪辑
[与本页关联的功能 MFPlay 是一项旧版功能。 它已被 MediaPlayer 和 IMFMediaEngine 取代。 这些功能已针对 Windows 10 和 Windows 11 进行了优化。 Microsoft 强烈建议新代码尽可能使用 MediaPlayer 和 IMFMediaEngine,而不是 DirectShow。 如果可能,Microsoft 建议应重写使用旧 API 的现有代码,以尽可能地使用新的 API。]
本主题介绍如何通过设置播放的开始时间和停止时间,在 MFPlay 中播放媒体文件的片段。
播放文件剪辑
- 调用 IMFPMediaPlayer::CreateMediaItemFromURL 或 IMFPMediaPlayer::CreateMediaItemFromObject 为文件创建媒体项。
- (可选)获取文件的总持续时间,如如何获取播放持续时间中所述。
- 调用 IMFPMediaItem::SetStartStopPosition 以设置开始时间和停止时间。 停止时间不得超过文件持续时间。
- 调用 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。
相关主题