Guide pratique pour lire une séquence de fichiers
[La fonctionnalité associée à cette page, MFPlay, est une fonctionnalité héritée. Elle a été remplacée par MediaPlayer et IMFMediaEngine. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Lorsque cela est possible, Microsoft recommande vivement l'utilisation par le nouveau code de MediaPlayer et IMFMediaEngine au lieu de DirectShow. Microsoft recommande, si possible, la réécriture du code existant qui utilise les API héritées pour être à jour avec les nouvelles API.]
Cette rubrique explique comment lire une séquence de fichiers audio/vidéo à l’aide de MFPlay.
La rubrique Prise en main de MFPlay montre comment lire un fichier multimédia unique. Vous pouvez également utiliser MFPlay pour lire une séquence de fichiers.
Méthode synchrone (bloquante)
- Appelez la méthode IMFPMediaPlayer::CreateMediaItemFromURL. La méthode crée un élément multimédia.
- Appelez IMFPMediaPlayer::SetMediaItem pour mettre l’élément multimédia en file d’attente pour la lecture.
- Appelez IMFPMediaPlayer::Play 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 utilise les paramètres suivants :
- Le premier paramètre est l'URL du fichier.
- Le deuxième paramètre indique si la méthode bloque. Si la valeur TRUE est indiquée, comme illustré ici, la méthode se bloque jusqu’à ce que l’élément multimédia soit créé.
- Le troisième paramètre associe une valeur DWORD_PTR arbitraire à é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 il peut prendre un certain temps pour se terminer. 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. Pour mettre l'élément en file d'attente pour la lecture, passez ce pointeur à la méthode IMFPMediaPlayer::SetMediaItem.
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.
Rubriques connexes