Tiempos de presentación de secuencia
En este tema se describe cómo el origen del secuenciador controla los tiempos de presentación durante la reproducción.
Información general
El origen del secuenciador admite dos modos diferentes: secuencias de lista de reproducción y secuencias de edición.
En una secuencia de edición, la aplicación especifica la duración de cada segmento de antemano, antes de iniciar la reproducción. En una secuencia de lista de reproducción, la aplicación no especifica la duración con antelación. (De hecho, es posible que no se conozca la duración).
En ambos casos, puede especificar el inicio de medios de un segmento y la hora de detención de medios. Estas horas especifican la posición en el archivo de origen donde comienza y finaliza el segmento. Por ejemplo, supongamos que el archivo de origen tiene 90 segundos de duración. Si desea recortar los primeros 10 segundos y los últimos 10 segundos, especificaría los siguientes valores:
- Inicio multimedia: 10 segundos
- Detención de medios: 80 segundos
Para especificar la hora de inicio del medio, establezca el atributo MF_TOPONODE_MEDIASTART en el nodo de origen. Para especificar la hora de detención de medios, establezca el atributo MF_TOPONODE_MEDIASTOP en el nodo de origen.
Para crear una secuencia de edición, establezca el atributo MF_SESSION_GLOBAL_TIME al crear la sesión multimedia. De lo contrario, la sesión multimedia espera secuencias de lista de reproducción. En una secuencia de edición, cada topología de segmento debe tener el atributo MF_TOPOLOGY_PROJECTSTART y el atributo MF_TOPOLOGY_PROJECTSTOP .
Secuencias de listas de reproducción
En una secuencia de lista de reproducción, el reloj de presentación comienza en cero y continúa a través de los límites del segmento. Los orígenes nativos entregan muestras con marcas de tiempo iguales al tiempo multimedia. La canalización convierte las marcas de tiempo en el tiempo de presentación correcto de la siguiente manera:
- Nueva marca de tiempo = media time + offset – media start
El valor de desplazamiento es el tiempo de presentación en el que finalizó el segmento anterior. Para el primer segmento, el desplazamiento es cero. Estos son dos ejemplos de cómo se calculan estas conversiones de marca de tiempo:
- Ejemplo 1: Supongamos que el primer segmento (S1) tiene 10 segundos de duración y el segundo segmento (S2) tiene una hora de inicio multimedia de cero. El origen nativo usa el tiempo multimedia para sus marcas de tiempo, por lo que la primera muestra de S2 tiene una marca de tiempo de cero. El desplazamiento es de 10 segundos (la duración de S1), por lo que la marca de tiempo ajustada es:0 + 10 – 0 = 10 segundos.
- Ejemplo 2: Supongamos que el segmento S1 tiene 10 segundos de duración y S2 tiene una hora de inicio multimedia de 5 segundos. La primera muestra de S2 tiene una marca de tiempo de 5 segundos (tiempo multimedia). El desplazamiento es de 10 segundos, por lo que la marca de tiempo ajustada es:5 + 10 – 5 = 10 segundos.
Todos los componentes de canalización de bajada de los nodos de origen reciben muestras con las marcas de tiempo ajustadas. Los nodos de origen de una topología pueden tener diferentes horas de inicio multimedia, por lo que los ajustes se calculan por separado para cada rama de la topología.
Cuando la presentación cambia al siguiente segmento, el reloj de presentación no se detiene ni restablece, y el tiempo de presentación aumenta de forma monotónica. Antes de que se inicie un nuevo segmento, la sesión multimedia envía a la aplicación un evento MESessionNotifyPresentationTime . El evento especifica la hora de inicio del segmento, en relación con el reloj de presentación y el valor del desplazamiento. Cuando se inicia un nuevo segmento, la canalización llama a Start en el origen del secuenciador con el valor VT_EMPTY. El origen del secuenciador envía un evento MESourceStarted sin hora de inicio.
Para buscar, la aplicación especifica un identificador de segmento más un desplazamiento de tiempo dentro del segmento. Después de la búsqueda, el reloj de presentación comienza en el desplazamiento del segmento . Este es un ejemplo de cómo funciona ese proceso:
- Ejemplo 3: la aplicación busca segmentar S3, con un desplazamiento de segmento de 10 segundos. El reloj de presentación comienza a 10 segundos (el desplazamiento del segmento). El desplazamiento no incluye la duración de los segmentos S1 y S2. El origen del secuenciador envía un evento MESourceStarted con una hora de inicio igual al desplazamiento del segmento, 10 segundos.
Después de una búsqueda, si la reproducción continúa hasta el siguiente segmento, la transición funciona igual que en los ejemplos anteriores, salvo que el desplazamiento no incluye los segmentos omitidos.
Estos son algunos detalles adicionales que afectan a cómo se marcan las muestras:
- Los descodificadores pueden necesitar datos más allá del tiempo de detención del medio. La canalización extrae tantos datos del origen como requiere el descodificador y, a continuación, recorta los ejemplos de salida del descodificador.
- Las transformaciones pueden almacenar en búfer los datos. Por ejemplo, un efecto de audio podría necesitar hacerlo. Cuando finaliza un segmento, la marca de tiempo de la última muestra de la transformación es anterior al final del segmento, ya que la transformación está reteniendo algunos datos. Cuando se inicia el siguiente segmento, la marca de tiempo de la primera muestra es ligeramente anterior al inicio del segmento. No hay ningún intervalo en las marcas de tiempo, por lo que los datos que llegan al receptor de medios son continuos. Cuando finaliza el segmento final, la canalización purga la transformación, por lo que no se pierden datos.
- Es posible que el origen deba iniciarse ligeramente antes de la hora de inicio del medio para seleccionar el fotograma clave anterior. Por lo tanto, después del ajuste, la primera muestra podría tener un tiempo de presentación negativo.
Secuencias de edición
En una secuencia de edición, la aplicación especifica los límites del segmento de antemano estableciendo los atributos MF_TOPOLOGY_PROJECTSTART y MF_TOPOLOGY_PROJECTSTOP . La canalización calcula los ajustes de las marcas de tiempo casi de la misma manera que para una secuencia de lista de reproducción:
Para el desplazamiento, usa el valor de MF_TOPOLOGY_PROJECTSTART, en lugar de usar el final observado del segmento.
Para la búsqueda, el desplazamiento usa un valor igual al valor de MF_TOPOLOGY_PROJECTSTART del segmento más el desplazamiento del segmento.
Por lo tanto, el tiempo de presentación de una secuencia de edición siempre es relativo al inicio de la presentación, incluso si la aplicación busca otro segmento.
Temas relacionados