Partager via


Pour récupérer des exemples multimédias avec le lecteur synchrone

[La fonctionnalité associée à cette page, le Kit de développement logiciel (SDK) Windows Media Format 11, est une fonctionnalité héritée. Il a été remplacé par le lecteur source et l’enregistreurrécepteur. Le lecteur source et l’enregistreur récepteur ont été optimisés pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise le lecteur source et l’enregistreur récepteur au lieu du Kit de développement logiciel (SDK) Windows Media Format 11, lorsque cela est possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

Vous devez demander chaque échantillon un à la fois auprès du lecteur synchrone. Cela vous donne plus de contrôle sur les échantillons que vous recevez et quand vous les recevez.

Utilisez la méthode IWMSyncReader::GetNextSample pour récupérer un exemple. Vous devez passer principalement des pointeurs vers des variables qui seront remplies avec des informations sur l’exemple récupéré en tant que paramètres. Le seul paramètre d’entrée est wStreamNum. Si vous transmettez un numéro de flux, GetNextSample récupère l’exemple suivant avec le numéro de flux spécifié. Si vous transmettez zéro pour wStreamNum, l’exemple suivant qui se produit chronologiquement dans le fichier est récupéré.

Par défaut, le lecteur synchrone récupère tous les exemples des sorties d’un fichier dans l’ordre chronologique. Si vous appelez GetNextSample et qu’il n’y a plus d’exemples à obtenir, il retourne NS_E_NO_MORE_SAMPLES, qui est un code d’erreur ayant échoué. Par conséquent, lors du codage, vous pouvez simplement parcourir les exemples jusqu’à ce que la méthode échoue.

Notes

Pour vous assurer que le lecteur synchrone fournit des exemples de durées correctes pour les flux vidéo, vous devez d’abord configurer la sortie du flux. Appelez la méthode IWMSyncReader::SetOutputSetting pour définir le paramètre g_wszVideoSampleDurations sur TRUE.

 

Exemple de code

L’exemple de code suivant montre comment utiliser GetNextSample pour récupérer tous les exemples d’un fichier.

// Loop through all the samples in the file.
do
{
   // Get the next sample.
   hr = pSyncReader->GetNextSample(0,
                                   &pMyBuffer,
                                   &cnsSampleTime,
                                   &cnsSampleDuration,
                                   &dwFlags,
                                   &dwOutputNumber,
                                   NULL);

   if(SUCCEEDED(hr))
   {
      // TODO: Process the sample in whatever way is appropriate 
      // to your application. When finished, clean up.
      pMyBuffer->Release();
      pMyBuffer = NULL;
      cnsSampleTime     = 0;
      cnsSampleDuration = 0;
      dwFlags           = 0;
      dwOutputNumber    = 0;
   }
} 
while (SUCCEEDED(hr));

IWMSyncReader, interface

Lecture de fichiers avec le lecteur synchrone