Compartir a través de


Eventos de origen del secuenciador

Cuando sequencer Source reproduce una secuencia de archivos, la sesión multimedia normalmente envía todos los mismos eventos que se envían durante la reproducción normal y que aparecen en Eventos de sesión multimedia. La aplicación obtiene estos eventos mediante la interfaz IMFMediaEventGenerator de la sesión multimedia.

Además, hay algunos eventos que son específicos de los segmentos de lista de reproducción.

Evento Descripción
MENewPresentation Indica a la aplicación que va a preinscribir la topología siguiente.
Para proporcionar una transición sin problemas entre dos presentaciones consecutivas, el origen del secuenciador carga la topología siguiente de antemano. Mientras se sigue reproduciendo la topología activa, el origen del secuenciador envía este evento para la siguiente topología, siempre y cuando haya una topología posterior disponible en el origen.
Estos datos de evento para este evento son el descriptor de presentación de la topología siguiente. La aplicación es responsable de establecer la topología correspondiente en la sesión multimedia, como se describe en Uso del origen del secuenciador.
MEEndOfPresentationSegment El origen del secuenciador genera este evento cuando la sesión multimedia ha terminado de reproducir el segmento actual, si ese segmento va seguido de otro segmento. (Si el segmento actual es el último, el origen del secuenciador genera el evento MEEndOfPresentation en su lugar).
La sesión multimedia reenvía este evento a la aplicación. Normalmente, la aplicación recibe MEEndOfPresentationSegment después de que la sesión multimedia haya iniciado el procesamiento del siguiente segmento, pero mientras que los receptores de medios siguen entregando las muestras para el segmento anterior.
MESessionTopologyStatus, con MF_TOPOSTATUS_SINK_SWITCHED de estado. La sesión multimedia genera este evento cuando realiza una transición a la siguiente topología en el origen del secuenciador y los receptores multimedia han completado la reproducción de la topología anterior. Este evento contiene un puntero a la topología siguiente.

 

Ejemplo 1: Reproducción sin omitir

Cuando el origen del secuenciador está implicado, el número de eventos que obtiene de la sesión multimedia puede resultar confuso, especialmente porque los eventos asociados a un segmento a menudo se intercalan con eventos para el siguiente segmento.

En el primer ejemplo, la aplicación pone en cola tres segmentos, S1, S2 y S3. El tercer segmento tiene la marca SequencerTopologyFlags_Last , para indicar que es el último segmento de la secuencia. Segmento al que corresponde cada evento se da entre paréntesis. También se muestran las llamadas a SetTopology de la aplicación para que el orden de las operaciones sea más claro.

Esta lista no incluye todos los eventos que puede recibir. (Por ejemplo, omite el evento MESessionCapabilitiesChanged , que se envía cada vez que cambian las funcionalidades de la sesión. Normalmente, una aplicación recibe varios eventos MESessionCapabilitiesChanged a lo largo de una presentación). Los eventos enumerados aquí son los que muestran la transición de un segmento a otro. Los eventos más importantes son MENewPresentation, que indica a la aplicación que preinscriba la siguiente topología y MEEndOfPresentationSegment, que señala el final de un segmento (excepto para el último segmento).

Dado que los eventos de Media Foundation son asincrónicos y no se serializan con llamadas de método, el orden exacto podría variar. Por ejemplo, podría recibir MF_TOPOSTATUS_STARTED_SOURCE para S1 antes de que la aplicación llame a SetTopology para S2.

Además, es posible que no obtenga todos los eventos que se enumeran aquí. Los eventos MEEndOfPresentation y MESessionEnded , por ejemplo, no se envían a menos que el último segmento tenga la marca SequencerTopologyFlags_Last .

Por último, esta lista no indica el paso del tiempo. El tiempo del "inicio de S1" al "final de S1" es la duración completa de S1, que puede ser de unos segundos o muchas horas, dependiendo del origen.

Ejemplo 2: Reproducción con omisión de segmento

En este ejemplo, la aplicación pone en cola los mismos segmentos, pero omite el segmento 3 mientras el segmento 1 se está reproduciendo. En este caso, se envían los siguientes eventos:

Cuando la aplicación llama a Start para ir al segmento 3, el origen del secuenciador cancela el segmento 1, que sigue reproduciendo. El evento MEEndOfPresentationSegment para este segmento contiene el atributo MF_EVENT_SOURCE_TOPOLOGY_CANCELED , lo que indica que el segmento finalizó porque se canceló. A continuación, dado que el segmento 2 ya está preinscrito, ese segmento se inicia pero, a continuación, se cancela inmediatamente. El evento MEEndOfPresentationSegment para el segmento 2 también contiene el atributo MF_EVENT_SOURCE_TOPOLOGY_CANCELED . Después, la sesión puede cambiar al segmento 3 y reproducirla con normalidad.

Acerca del origen del secuenciador

Origen del secuenciador