Comment lire une séquence de fichiers

[MFPlay est disponible pour une utilisation dans les systèmes d’exploitation spécifiés dans la section Configuration requise. Il sera peut-être modifié ou indisponible dans les versions ultérieures. ]

Cette rubrique explique comment lire une séquence de fichiers audio/vidéo à l’aide de MFPlay.

La rubrique Prise en main avec MFPlay montre comment lire un seul fichier multimédia. Vous pouvez également utiliser MFPlay pour lire une séquence de fichiers.

Méthode synchrone (blocage)

  1. Appelez la méthode IMFPMediaPlayer::CreateMediaItemFromURL . La méthode crée un élément multimédia.
  2. Appelez IMFPMediaPlayer::SetMediaItem pour mettre en file d’attente l’élément multimédia pour la lecture.
  3. Appelez IMFPMediaPlayer::P lay pour démarrer la lecture.

Ces étapes sont présentées dans le code suivant.

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

La méthode CreateMediaItemFromURL prend les paramètres suivants :

  • Le premier paramètre est l’URL du fichier.
  • Le deuxième paramètre spécifie si la méthode bloque. La spécification de la valeur TRUE, comme illustré ici, entraîne le blocage de la méthode jusqu’à ce que l’élément multimédia soit créé.
  • Le troisième paramètre associe une valeur DWORD_PTR arbitraire à l’élément multimédia. Vous pouvez obtenir cette valeur ultérieurement en appelant IMFPMediaItem::GetUserData.
  • Le quatrième paramètre reçoit un pointeur vers l’interface IMFPMediaItem de l’élément multimédia.

Méthode asynchrone (non bloquante)

Évitez l’option de blocage si vous appelez CreateMediaItemFromURL à partir de votre thread d’interface utilisateur, car l’exécution peut prendre un certain temps. La méthode ouvre généralement un fichier ou une connexion réseau et lit suffisamment de données pour analyser les en-têtes de fichier, ce qui peut prendre du temps. Par conséquent, il est généralement préférable de définir le deuxième paramètre sur FALSE. Cette option entraîne l’exécution asynchrone de la méthode. Lorsque l’option asynchrone est utilisée, le dernier paramètre doit être NULL :

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

Lorsque l’élément multimédia est créé, votre application reçoit un événement MFP_EVENT_TYPE_MEDIAITEM_CREATED . La structure de données de cet événement contient un pointeur vers l’élément multimédia. Passez ce pointeur à la méthode SetMediaItem pour mettre en file d’attente l’élément pour la lecture.

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

Spécifications

MFPlay nécessite Windows 7.

Utilisation de MFPlay pour la lecture audio/vidéo