Freigeben über


Wiedergeben eines Dateiclips

[Bei dem auf dieser Seite gezeigten Feature MFPlay handelt es sich um ein Legacyfeature. Es wurde durch MediaPlayer und IMFMediaEngine abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass in neuem Code wenn möglich MediaPlayer und IMFMediaEngine anstelle von DirectShow verwendet wird. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, wenn möglich umgeschrieben wird, um die neuen APIs zu verwenden.]

In diesem Thema wird die Wiedergabe eines Segments einer Mediendatei in MFPlay beschrieben, indem die Start- und Stoppzeiten für die Wiedergabe festgelegt werden.

Wiedergeben eines Dateiclips

  1. Rufen Sie IMFPMediaPlayer::CreateMediaItemFromURL oder IMFPMediaPlayer::CreateMediaItemFromObject auf, um ein Medienelement für die Datei zu erstellen.
  2. Rufen Sie optional die Gesamtdauer der Datei ab, wie unter Abrufen der Wiedergabedauer beschrieben.
  3. Rufen Sie IMFPMediaItem::SetStartStopPosition auf, um die Start- und Stoppzeiten festzulegen. Die Stoppzeit darf die Dateidauer nicht überschreiten.
  4. Rufen Sie IMFPMediaPlayer::SetMediaItem auf, um die Wiedergabe zu starten.

Im folgenden Beispiel wird die blockierende Version von CreateMediaItemFromURL verwendet. Wenn die nicht blockierende Version verwendet wird, muss der nach CreateMediaItemFromURL angezeigte Code im Handler für das MFP_EVENT_TYPE_MEDIAITEM_CREATED-Ereignis platziert werden. Weitere Informationen zu Ereignissen in MFPlay finden Sie unter Empfangen von Ereignissen vom Player.

Zum Abrufen der Dateidauer ruft dieses Beispiel die im Thema Abrufen der Wiedergabedauer gezeigte GetPlaybackDuration-Funktion auf.

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;
}

Anforderungen

MFPlay erfordert Windows 7.

Verwenden von MFPlay für die Audio-/Videowiedergabe