Compartir a través de


Para recuperar ejemplos multimedia con el lector sincrónico

[La característica asociada a esta página, SDK de Windows Media Format 11, es una característica heredada. Se ha reemplazado por lector de origen y escritor receptor. El lector de origen y el sistema de escritura receptor se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use lector de origen y escritor receptor en lugar del SDK de Windows Media Format 11, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.

Debe solicitar cada muestra una a la vez desde el lector sincrónico. Esto le proporciona más control sobre los ejemplos que recibe y cuando los recibe.

Use el método IWMSyncReader::GetNextSample para recuperar un ejemplo. Debe pasar principalmente punteros a variables que se rellenarán con información sobre el ejemplo recuperado como parámetros. El único parámetro de entrada es wStreamNum. Si pasa un número de secuencia, GetNextSample recuperará el siguiente ejemplo con el número de secuencia especificado. Si pasa cero para wStreamNum, se recupera el siguiente ejemplo que se produce cronológicamente en el archivo.

De forma predeterminada, el lector sincrónico recupera todas las muestras de las salidas de un archivo en orden cronológico. Si llama a GetNextSample y no hay más ejemplos para obtener, devolverá NS_E_NO_MORE_SAMPLES, que es un código de error con errores. Al codificar por lo tanto, simplemente puede recorrer ejemplos hasta que se produzca un error en el método.

Nota:

Para asegurarse de que el lector sincrónico ofrece duraciones de muestra correctas para las secuencias de vídeo, primero debe configurar la salida de la secuencia. Llame al método IWMSyncReader::SetOutputSetting para establecer el valor de g_wszVideoSampleDurations en TRUE.

 

Código de ejemplo

En el código de ejemplo siguiente se muestra cómo usar GetNextSample para recuperar todos los ejemplos de un archivo.

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

Interfaz IWMSyncReader

Leer archivos con el lector sincrónico