Compartir a través de


Eventos de origen del secuenciador

Cuando el origen del secuenciador de 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 específicos de los segmentos de lista de reproducción.

Evento Descripción
MENewPresentation Indica a la aplicación que va a inscribir previamente 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. Aunque la topología activa sigue reproduciendo, 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 Usar el 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 en su lugar el evento MEEndOfPresentation).
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 los receptores de medios siguen entregando las muestras para el segmento anterior.
MESessionTopologyStatus , con estado MF_TOPOSTATUS_SINK_SWITCHED. 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 suelen intercalarse 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. El segmento al que corresponde cada evento se asigna entre paréntesis. También se muestran las llamadassetTopology de la aplicaciónpara que el orden de las operaciones sea más claro.

  • Llamadas de aplicación IMFMediaSession::SetTopology (S1)
  • meSessionTopologySet (S1)
  • meSessionTopologyStatus: MF_TOPOSTATUS_READY (S1)
  • MENewPresentation (inscripción previa de S2)
  • Llamadas de aplicación IMFMediaSession::SetTopology (S2)
  • MESessionTopologyStatus: MF_TOPOSTATUS_STARTED_SOURCE (inicio de S1)
  • (S2) de MESessionTopologySet
  • MEEndOfPresentationSegment (final de S1)
  • MESessionTopologyStatus : MF_TOPOSTATUS_ENDED (S1)
  • MESessionTopologyStatus: MF_TOPOSTATUS_SINK_SWITCHED (transición a S2)
  • MESessionTopologyStatus : MF_TOPOSTATUS_READY (S2)
  • MESessionTopologyStatus: MF_TOPOSTATUS_STARTED_SOURCE (inicio de S2)
  • meNewPresentation (inscripción previa de S3)
  • Llamadas de aplicación IMFMediaSession::SetTopology (S2)
  • (S3) de MESessionTopologySet
  • MEEndOfPresentationSegment (finales de S2)
  • MESessionTopologyStatus : MF_TOPOSTATUS_ENDED (S2)
  • meSessionTopologyStatus: MF_TOPOSTATUS_SINK_SWITCHED (transición a S3)
  • MESessionTopologyStatus : MF_TOPOSTATUS_READY (S3)
  • MESessionTopologyStatus : MF_TOPOSTATUS_STARTED_SOURCE (inicio de S3)
  • MEEndOfPresentation (final de S3; último segmento)
  • MESessionTopologyStatus: MF_TOPOSTATUS_ENDED
  • MESessionEnded

Esta lista no incluye todos los eventos que pueda 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 en toda 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 topología siguiente y MEEndOfPresentationSegment, que indica 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 enumerados aquí. Los MEEndOfPresentation y eventos 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 de "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 segmentos

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

  • Llamadas de aplicación IMFMediaSession::SetTopology (S1)
  • meSessionTopologySet (S1)
  • meSessionTopologyStatus: MF_TOPOSTATUS_READY (S1)
  • MENewPresentation (inscripción previa de S2)
  • Llamadas de aplicación IMFMediaSession::SetTopology (S2)
  • MESessionTopologyStatus: MF_TOPOSTATUS_STARTED_SOURCE (inicio de S1)
  • (S2) de MESessionTopologySet
  • Llamadas de aplicación IMFMediaSession::Start (vaya a S3)
  • meNewPresentation (inscripción previa de S3)
  • Llamadas de aplicación IMFMediaSession::SetTopology (S3)
  • MESessionStarted
  • MEEndOfPresentationSegment (S1 cancelado)
  • MESessionTopologyStatus : MF_TOPOSTATUS_ENDED (S1)
  • (S3) de MESessionTopologySet
  • MESessionTopologyStatus: MF_TOPOSTATUS_SINK_SWITCHED (transición a S2)
  • MESessionTopologyStatus : MF_TOPOSTATUS_READY (S2)
  • MESessionTopologyStatus : MF_TOPOSTATUS_STARTED_SOURCE (S2)
  • MEEndOfPresentationSegment (S2 cancelado)
  • MESessionTopologyStatus : MF_TOPOSTATUS_ENDED (S2)
  • meSessionTopologyStatus: MF_TOPOSTATUS_SINK_SWITCHED (transición a S3)
  • MESessionTopologyStatus : TOPOSTATUS_READY (S3)
  • MESessionTopologyStatus: MF_TOPOSTATUS_STARTED_SOURCE (S3)

Cuando la aplicación llama a Inicio 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 del 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

de origen del secuenciador de