如何播放文件剪辑
[MFPlay 可用于“要求”部分中指定的操作系统。 它可能在后续版本中变更或不可用。 ]
本主题介绍如何通过设置播放的开始和停止时间,在 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。
相关主题
反馈
https://aka.ms/ContentUserFeedback。
即将发布:在整个 2024 年,我们将逐步淘汰作为内容反馈机制的“GitHub 问题”,并将其取代为新的反馈系统。 有关详细信息,请参阅:提交和查看相关反馈