如何播放檔案剪輯
[與此頁面 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。
相關主題