Características de origen de red
El origen de red proporciona la implementación base para los archivos multimedia de streaming y expone la interfaz IMFMediaSource . La implementación específica del origen de red depende del protocolo usado para abrir el código fuente, como RTSP o HTTP. Los orígenes de red específicos del protocolo amplían la funcionalidad de red básica. Para obtener información sobre los esquemas y protocolos admitidos, consulte Protocolos admitidos.
El origen de red:
- Implementa características como el almacenamiento en caché, la detección de proxy y la reconexión automática.
- Convierte las llamadas independientes del protocolo del solucionador de origen a llamadas específicas del protocolo.
- Interactúa con la capa de socket y el sistema operativo. Analiza la descripción de SDP y la usa como datos de configuración y lee los datos de flujo de la capa de sockets subyacentes. Al recibir, el origen de red es responsable de reordenar y solicitar retransmisiones de paquetes.
Creación de origen de red
La creación de un origen multimedia para un origen desde la red no es diferente de un origen multimedia para un archivo local. La aplicación pasa la dirección URL del origen a métodos de resolución de origen, como IMFSourceResolver::CreateObjectFromURL o IMFSourceResolver::BeginCreateObjectFromURL y especifica la marca MF_RESOLUTION_MEDIASOURCE. Para obtener más información sobre el uso de esta marca, vea Uso del solucionador de origen.
Según el esquema proporcionado por la aplicación, el solucionador de origen carga el objeto de controlador de esquema adecuado, que expone la interfaz IMFSchemeHandler . La aplicación también puede usar el controlador de esquema directamente para crear el origen de red mediante una llamada a IMFSchemeHandler::BeginCreateObject.
Para obtener más información, vea Controladores de esquema y controladores de Byte-Stream.
Media Foundation no admite secuencias de bytes para orígenes de red. El objeto de secuencia de bytes solo se admite en el escenario de contenido descargado. 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. En este caso, se usa el protocolo de descarga HTTP.
Si la aplicación solicita al solucionador de origen que cree un objeto de secuencia de bytes para los esquemas "http:", "mms:" o "rtsp:", la llamada produce un error de MF_E_UNSUPPORTED_SCHEME.
Nota:
En Windows 7, el origen de red admite archivos de la estación de Windows Media (. NSC). Estos archivos se usan en streaming de multidifusión de contenido multimedia a través de una red. Para crear el origen de red para un especificado. El archivo NSC, la aplicación debe usar la resolución de origen.
Si la aplicación usa el controlador de esquemas, la llamada asincrónica omite el parámetro dwFlags y devuelve un puntero al origen de red al finalizar.
En la ilustración siguiente se muestra el flujo de datos para el streaming multimedia mediante el origen de red.
Configuración del origen de red
En este tema se describen las características admitidas por el origen de red y las opciones de configuración asociadas. Una aplicación puede configurar el origen de red al crear el objeto de origen de red. Estas opciones se almacenan en un objeto IPropertyStore , que la aplicación debe pasar en el parámetro pProps de los métodos de resolución de origen o IMFSchemeHandler::BeginCreateObject.
Volver a conectar automáticamente
La característica de reconexión automática del origen de red permite a un cliente volver a conectarse al servidor multimedia automáticamente cuando se produce un error en la conexión TCP con el servidor o el cliente no recibe paquetes. Cuando se produce un error en la conexión, el origen de red intenta volver a conectarse al servidor multimedia con la misma configuración que se usó en la conexión anterior. El proceso de reconexión es asincrónico. El origen de red genera el evento MEReconnectStart cuando comienza la reconexión y el evento MEReconnectEnd cuando la reconexión se realiza correctamente o se produce un error.
Si el número de intentos de reconexión supera el valor máximo especificado por la propiedad MFNETSOURCE_AUTORECONNECTLIMIT , se cancela la operación de reconexión. El número de intentos de reconexión se almacena en la propiedad MFNETSOURCE_AUTORECONNECTPROGRESS .
La reconexión automática permite una reproducción fluida del contenido multimedia incluso cuando se produce un error en la conexión TCP con el servidor multimedia. Para una experiencia de reproducción fluida, el cliente debe tener datos suficientes, al menos de 1 a 2 minutos, en su memoria caché para continuar la reproducción hasta la reconexión. La cantidad máxima de datos que el origen de red puede almacenar en búfer se puede establecer en la propiedad MFNETSOURCE_MAXBUFFERTIMEMS .
Streaming rápido
El cliente de origen de red solicita al servidor que transmita algunos de los datos al principio del contenido a una velocidad más rápida que la especificada por la velocidad de bits del contenido. Si el inicio rápido está habilitado en el servidor, el servidor envía una secuencia de velocidad de bits acelerada para que el cliente pueda almacenar en búfer una cantidad suficiente de datos más rápido que en tiempo real. Esto mejora la experiencia del usuario al minimizar los retrasos iniciales en el almacenamiento en búfer, lo que puede deberse a diversos factores, como la baja velocidad del equipo cliente o la red, y el ancho de banda disponible.
Para especificar la cantidad de datos de streaming rápido que el cliente puede solicitar, establezca la propiedad MFNETSOURCE_ACCELERATEDSTREAMINGDURATION . Si el origen de red usa UDP como protocolo de transporte, especifique la cantidad máxima de datos de streaming rápido estableciendo la propiedad MFNETSOURCE_MAXUDPACCELERATEDSTREAMINGDURATION en su lugar.
El streaming rápido en el cliente también es posible a través de la característica Caché rápida : el streaming de contenido a petición es más rápido que los datos en tiempo real y el almacenamiento en caché en la caché local del cliente. Para usar este tipo de streaming rápido, fast Cache debe estar habilitado en el origen de red y el servidor debe admitirlo. Cuando el cliente solicita contenido desde el servidor, el origen de red comprueba primero si el contenido ya está en la memoria caché del cliente. Si el contenido está en la memoria caché local del cliente y no ha expirado, se representa. Si el contenido no está en la memoria caché local o ya ha expirado, el contenido se transmite y se almacena en caché, y el origen de red lo reproduce desde la caché local. En las solicitudes posteriores, para las listas de reproducción, solo se almacenan en caché las entradas que faltan y, a continuación, se reproducen. Si una entrada de lista de reproducción ya está en la memoria caché local del cliente, se reproduce desde allí y no se vuelve a almacenar en caché.
De forma predeterminada, Fast Cache está habilitado en el cliente de origen de red. Sin embargo, los siguientes factores también determinan si se usa la característica:
- El cliente debe tener ancho de banda adicional disponible para descargar y almacenar en caché el contenido más rápido que la velocidad normal.
- El cliente debe tener suficiente espacio en disco. Si el cliente tiene menos de 100 MB de espacio libre en disco después de almacenar en caché el contenido solicitado a petición, no se almacena en caché, sino que se transmite y se representa simultáneamente.
La característica Caché rápida se controla mediante la propiedad MFNETSOURCE_CACHEENABLED .
Administración de búfer
El origen de red proporciona una administración eficaz del búfer que supervisa el estado del búfer en el cliente. De forma predeterminada, el origen de red almacena en búfer 5 segundos de datos al iniciarse. Este valor se puede configurar estableciendo la propiedad MFNETSOURCE_BUFFERINGTIME . En función de este valor de propiedad, el origen de red calcula el tamaño del búfer suficiente para garantizar la reproducción fluida e ininterrumpida del contenido multimedia. Si esta propiedad está establecida en 0, la administración del búfer está deshabilitada. Cuando la cantidad de contenido del búfer es baja, el origen de red inicia el almacenamiento en búfer y genera el evento MEBufferingStarted para indicar que se ha iniciado el almacenamiento en búfer. Al recibir este evento, la canalización deja de representarse. Cuando se completa el almacenamiento en búfer, el origen de red genera el evento MEBufferingStopped y el cliente puede empezar a representarse de nuevo.
El cliente comienza a representar el contenido después de haber acumulado la cantidad de datos indicados por el tamaño del búfer del primer ejemplo. Si este valor es menor que el tamaño del búfer calculado, la reproducción se inicia inmediatamente. Este comportamiento es muy similar a la característica Inicio rápido.
La propiedad MFNETSOURCE_MAXBUFFERTIMEMS almacena la cantidad máxima de datos que se pueden almacenar en búfer.
Selección de ancho de banda
Cuando un cliente se conecta al servidor multimedia, como parte de la configuración de la conexión, el origen de red realiza la medición estática de par de paquetes para calcular el ancho de banda de vínculo inicial entre el cliente y el servidor. En función del resultado de esta medida, el cliente puede seleccionar secuencias de audio y vídeo que se ajusten al ancho de banda estimado. Esto garantiza una reproducción fluida del contenido multimedia de streaming.
Durante la fase de inicio rápido, se realiza la medición dinámica de par de paquetes . En este proceso, el cliente recibe grandes cantidades de datos, que pueden ser varios paquetes o muestras.
El resultado de la medición dinámica del par de paquetes es más preciso que la estimación del ancho de banda de vínculo devuelta por la medición estática del par de paquetes porque el proceso estático de par de paquetes envía un único paquete de tamaño fijo, que puede no producir resultados precisos para redes de ancho de banda alto.
La aplicación puede obtener el ancho de banda estimado mediante la propiedad MFNETSOURCE_PPBANDWIDTH .
Las condiciones de red pueden cambiar dinámicamente, lo que provoca errores en la reproducción del origen de red. El origen de red puede cambiar la selección inicial del flujo del cliente en función de la velocidad de recepción y el estado del búfer. Por ejemplo, el cliente podría cambiar a una velocidad de bits menor durante la congestión de red y volver a una velocidad de bits más alta cuando el tráfico de red ha mejorado y el cliente ha acumulado una cantidad suficiente de contenido almacenado en búfer.
Temas relacionados