Reproducir archivos desde un origen de red
[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.
Leer desde una red no es fundamentalmente diferente de leer un archivo local. La aplicación pasa la dirección URL al método IWMReader::Open del objeto lector y el objeto lector controla los detalles de los protocolos de red. El objeto lector usa la administración inteligente del búfer para proporcionar la reproducción más fluida posible. Si la aplicación necesita más control sobre la configuración de red del objeto lector, estas están disponibles a través de las interfaces IWMReaderNetworkConfig e IWMReaderNetworkConfig2 .
El contenido de un origen de red se divide en una de las dos categorías siguientes:
- Streaming. Los datos se transmiten justo a tiempo para reproducirse en el equipo local. Los servidores que ejecutan Windows Media Services pueden proporcionar datos de streaming. Si se transmite contenido de varias velocidades de bits (MBR), el cliente puede solicitar una velocidad de bits diferente del servidor a medida que avanza el streaming.
- Descargó. Todos los datos se transmiten lo antes posible para que se pueda guardar como un archivo en el equipo local. Los servidores web proporcionan datos descargados. No hay ninguna comunicación desde el cliente al servidor después de que se inicie la descarga.
Cuando el objeto lector descarga un archivo de un servidor web, usa una técnica denominada streaming progresivo, que permite a un reproductor empezar a representar el contenido antes de que se complete la descarga. Los datos se almacena en búfer para proporcionar un flujo ininterrumpido de datos al reproductor. Se usa información como la velocidad de transferencia y la duración del contenido para determinar cuánto tiempo almacenar en búfer los datos antes de darles al reproductor.
Para abrir un archivo o transmitir a través de una red, llame al método IWMReader::Open del objeto lector con la dirección URL adecuada. Open es una llamada asincrónica, por lo que devuelve inmediatamente. Cuando el origen está listo para su lectura, el objeto lector envía una notificación de WMT_OPENED al método de devolución de llamada IWMStatusCallback::OnStatus de la aplicación. En este momento, la aplicación puede consultar al lector para el modo de entrega llamando a IWMReaderAdvanced2::GetPlayMode. En el caso del contenido de red, este método devolverá WMT_PLAY_MODE_DOWNLOAD, lo que indica el contenido descargado o WMT_PLAY_MODE_STREAMING, lo que indica el contenido transmitido.
Para empezar a leer el archivo o la secuencia, llame al método IWMReader::Start . El lector envía una notificación de WMT_BUFFERING_START cuando comienza a almacenar en búfer el contenido y una notificación WMT_BUFFERING_STOP cuando se completa el almacenamiento en búfer. Aunque el lector almacena en búfer el contenido (es decir, entre estas dos notificaciones), es posible que desee mostrar el progreso de almacenamiento en búfer al usuario. El método IWMReaderAdvanced2::GetBufferProgress devuelve el porcentaje de datos almacenados en búfer y el tiempo estimado que permanece. Para el contenido descargado, también puedes llamar a IWMReaderAdvanced2::GetDownloadProgress para obtener el progreso de la descarga. Llame a estos métodos repetidamente para actualizar la pantalla, hasta que se haya completado el almacenamiento en búfer. El almacenamiento en búfer puede producirse de nuevo durante la reproducción, debido a factores como la congestión de la red. Si esto ocurre, la aplicación recibe otra notificación de WMT_BUFFERING_START.
Cuando el objeto lector comienza a reproducir el contenido, envía una notificación WMT_STARTED. A medida que cada ejemplo está descodificado y está disponible para su representación, el lector lo pasa a la aplicación a través del método de devolución de llamada IWMReaderCallback::OnSample . En este momento, el proceso es el mismo que para la reproducción de archivos local. Cuando se detiene la reproducción, el lector envía una notificación de WMT_END_OF_STREAMING.
Temas relacionados