Condividi tramite


Come riprodurre una sequenza di file

[La funzionalità associata a questa pagina, MFPlay, è una funzionalità legacy. È stato sostituito da MediaPlayer e IMFMediaEngine. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer e IMFMediaEngine invece di DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

In questo argomento viene descritto come riprodurre una sequenza di file audio/video usando MFPlay.

L'argomento Introduzione a MFPlay illustra come riprodurre un singolo file multimediale. Puoi anche usare MFPlay per riprodurre una sequenza di file.

Metodo sincrono (blocking)

  1. Chiamare il metodo IMFPMediaPlayer::CreateMediaItemFromURL. Il metodo crea un elemento multimediale.
  2. Chiama IMFPMediaPlayer::SetMediaItem per accodare l'elemento multimediale per la riproduzione.
  3. Chiama IMFPMediaPlayer::P lay per avviare la riproduzione.

Il codice riportato di seguito illustra i diversi passaggi.

HRESULT OpenMediaFile(IMFPMediaPlayer *pPlayer, PCWSTR pwszURL)
{
    HRESULT hr = S_OK;
    
    IMFPMediaItem *pItem = NULL;

    hr = pPlayer->CreateMediaItemFromURL(
        sURL, 
        TRUE,  // Blocking call
        0,     // User data.
        &pItem
        );

    if (SUCCEEDED(hr))
    {
        hr = pPlayer->SetMediaItem(pItem);
    }

    if (SUCCEEDED(hr))
    {
       hr = pPlayer->Play();
    }

    if (pItem)
    {
        pItem->Release();
    }
    return hr;
}

Il metodo CreateMediaItemFromURL accetta i parametri seguenti:

  • Il primo parametro è l'URL del file.
  • Il secondo parametro specifica se il metodo si blocca. Se si specifica il valore TRUE, come illustrato di seguito, il metodo viene bloccato fino alla creazione dell'elemento multimediale.
  • Il terzo parametro associa un valore DWORD_PTR arbitrario all'elemento multimediale. È possibile ottenere questo valore in un secondo momento chiamando IMFPMediaItem::GetUserData.
  • Il quarto parametro riceve un puntatore all'interfaccia IMFPMediaItem dell'elemento multimediale.

Metodo asincrono (non bloccaggio)

Evitare l'opzione di blocco se chiami CreateMediaItemFromURL dal thread dell'interfaccia utente, perché può richiedere una notevole quantità di tempo per il completamento. Il metodo apre in genere un file o una connessione di rete e legge dati sufficienti per analizzare le intestazioni del file, che possono richiedere molto tempo. Pertanto, in genere è preferibile impostare il secondo parametro su FALSE. Questa opzione fa sì che il metodo esegua in modo asincrono. Quando si usa l'opzione asincrona, l'ultimo parametro deve essere NULL:

    hr = pPlayer->CreateMediaItemFromURL(
        sURL, 
        FALSE,  // Non-blocking call.
        0,      // User data.
        NULL    // Must be NULL for the non-blocking call.
        );

Quando viene creato l'elemento multimediale, l'applicazione riceve un evento MFP_EVENT_TYPE_MEDIAITEM_CREATED . La struttura dei dati per questo evento contiene un puntatore all'elemento multimediale. Passare questo puntatore al metodo SetMediaItem per accodare l'elemento per la riproduzione.

void OnMediaItemCreated(MFP_MEDIAITEM_CREATED_EVENT *pEvent)
{
    HRESULT hr = S_OK;
    if (FAILED(pEvent->header.hrEvent))
    {
        // Handle error. (Not shown.)
    }
    else
    {
        hr = g_pPlayer->SetMediaItem(pEvent->pMediaItem);
    }
}

Requisiti

MFPlay richiede Windows 7.

Uso di MFPlay per la riproduzione audio/video