共用方式為


如何播放檔案剪輯

[與此頁面 MFPlay 相關聯的功能是舊版功能。 它已被 MediaPlayerIMFMediaEngine 取代。 這些功能已針對 Windows 10 和 Windows 11 進行優化。 Microsoft強烈建議新程式代碼盡可能使用 MediaPlayerIMFMediaEngine,而不是 DirectShow。 Microsoft建議使用舊版 API 的現有程式代碼,盡可能改寫成使用新的 API。]

本主題描述如何藉由設定播放的開始和停止時間,在 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 進行音訊/視訊播放