Atributo duration de SegmentTemplate - AWS Elemental MediaPackage

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Atributo duration de SegmentTemplate

En los manifiestos DASH predeterminados, SegmentTemplate contiene un objeto SegmentTimeline. La línea temporal describe todos los segmentos de Representation, incluida su duración y su hora de inicio. Cuando hay eventos en directo, AWS Elemental MediaPackage va añadiendo los segmentos a la escala de tiempo a medida que los recibe del codificador. Para estar al tanto de los nuevos segmentos disponibles, el dispositivo de reproducción debe solicitar periódicamente un manifiesto actualizado de MediaPackage.

Si todos los segmentos de una representación tienen la misma duración, puede ayudar a reducir la latencia y disminuir el tamaño del manifiesto habilitando MediaPackage para eliminar los objetos SegmentTimeline. En su lugar, MediaPackage agrega un atributo duration a las propiedades de SegmentTemplate. El dispositivo de reproducción calcula cuándo van a estar disponibles los segmentos utilizando duration y startNumber. Como el dispositivo de reproducción no necesita un manifiesto actualizado para obtener información sobre los segmentos, no tiene que solicitar actualizaciones constantemente para continuar con la reproducción. Para obtener más información sobre el funcionamiento del atributo duration, consulte las siguientes secciones.

Cómo funciona el atributo duration

Habilite el atributo $duration$ a través de la opción Segment template format (Formato de la plantilla de segmentos) del punto de enlace DASH, tal y como se describe en Creación de un punto de conexión DASH. Esto es lo que ocurre con el manifiesto:

  1. Cuando AWS Elemental MediaPackage genera el manifiesto DASH, añade el atributo duration al objeto SegmentTemplate, tal y como se muestra en el siguiente ejemplo:

    <SegmentTemplate timescale="30000" media="index_video_1_0_$Number$.mp4?m=1535562908" initialization="index_video_1_0_init.mp4?m=1535562908" startNumber="175032" duration="90000" presentationTimeOffset="62061"/>

    En la plantilla, no se incluyen líneas temporales ni descripciones individuales de los segmentos.

    importante

    A excepción del segmento final, los segmentos no deben desviarse más de un 50 % respecto del valor de la duración. Con una duración de 90 000, los segmentos deben estar entre 45 000 y 135 000 (entre 1,5 y 4,5 segundos, con una escala temporal de 30 000).

    A continuación, se muestra un ejemplo de un conjunto de adaptación que utiliza el segmento duration de la plantilla de segmentos:

    <AdaptationSet mimeType="video/mp4" segmentAlignment="true" subsegmentAlignment="true" startWithSAP="1" subsegmentStartsWithSAP="1" bitstreamSwitching="true"> <Representation id="1" width="852" height="480" frameRate="30/1" bandwidth="1200000" codecs="avc1.4D401F"> <SegmentTemplate timescale="30000" media="index_video_1_0_$Number$.mp4?m=1535562908" initialization="index_video_1_0_init.mp4?m=1535562908" startNumber="175032" duration="90000" presentationTimeOffset="62061"/> </Representation> <Representation id="2" width="640" height="360" frameRate="30/1" bandwidth="800000" codecs="avc1.4D401E"> <SegmentTemplate timescale="30000" media="index_video_3_0_$Number$.mp4?m=1535562908" initialization="index_video_3_0_init.mp4?m=1535562908" startNumber="175032" duration="90000" presentationTimeOffset="62061"/> </Representation> <Representation id="3" width="320" height="240" frameRate="30/1" bandwidth="499968" codecs="avc1.4D400D"> <SegmentTemplate timescale="30000" media="index_video_5_0_$Number$.mp4?m=1535562908" initialization="index_video_5_0_init.mp4?m=1535562908" startNumber="175032" duration="90000" presentationTimeOffset="62061"/> </Representation> </AdaptationSet>
  2. El dispositivo de reproducción solicita los segmentos utilizando la URL definida en el atributo media. En la URL, la variable $Number$ se sustituye por el número del segmento, empezando por el valor de startNumber del objeto SegmentTemplate del primer segmento.

  3. Si el dispositivo de reproducción debe determinar el segmento más reciente, utilice esta fórmula:

    ((hora del reloj - availabilityStartTime) / (duration / timescale)) + startNumber

    Un dispositivo de reproducción calcula el segmento más reciente con los siguientes valores:

    • Hora del reloj del dispositivo de reproducción: 2018-11-16T19:18:30Z

    • Atributo availabilityStartTime del objeto MPD del manifiesto: 2018-11-16T19:08:30Z

    • Atributo duration del objeto SegmentTemplate del manifiesto: 90000

    • Atributo timescale de SegmentTemplate: 30000

    • Atributo startNumber de SegmentTemplate: 175032

    El cálculo que utiliza es ((2018-11-16T19:18:30Z - 2018-11-16T19:08:30Z) / (90000/30000)) + 175032

    Esto se convierte en (600 segundos de tiempo transcurrido) / (3 segundos de duración de cada segmento) = 200 segmentos transcurridos. Al añadir esos segmentos al segmento 175032 inicial, el segmento 175232 se convierte en el más reciente.

Limitaciones del atributo duration

Para garantizar que la reproducción se realiza correctamente y evitar conflictos con las duraciones de los segmentos, AWS Elemental MediaPackage establece las siguientes limitaciones en el atributo duration:

  • La característica solamente puede habilitarse cuando se crea el punto de enlace.

    El punto de enlace no se puede modificar para añadir después el atributo duration a los manifiestos DASH. Esta limitación impide que se pueda cambiar el formato de una plantilla de segmentos por otro que utilice duration. Por ejemplo, no puede crear un punto de enlace que utilice la variable $Time$ con SegmentTimeline y editar después el punto de enlace para que utilice la variable $Number$ con duration.

  • Debe mantener el valor de segment duration (duración del segmento) que se estableció al crear el punto de enlace.

    No se puede editar el punto de enlace para modificar la duración del segmento.

  • En los puntos de enlace que utilizan duration, debe crear manifiestos de DASH con un solo periodo..

    No puede utilizar DASH de varios periodos con el atributo duration.

  • Su flujo de ingesta debe utilizar una cadencia de segmentación normal.

  • No puede usar una longitud de segmento variable en el flujo de ingesta. Por ejemplo, como resultado de una segmentación relacionada con SCTE-35.

Atributo duration con manifiestos DASH compactados

Si se combinan manifiestos compactados con el atributo duration, se reducirá un poco el tamaño del manifiesto, aunque no mucho. Los manifiestos compactados tienen un objeto SegmentTemplate y un objeto SegmentTimeline en cada conjunto de adaptación. Cuando se utiliza el atributo duration, AWS Elemental MediaPackage elimina la línea temporal del segmento. En los dos casos, el manifiesto tiene un objeto SegmentTemplate en cada conjunto de adaptación, pero no un objeto SegmentTimeline. Vea los siguientes ejemplos.

Para obtener más información acerca de los manifiestos compactados, consulte Manifiestos de DASH compactos.

importante

Si los segmentos de una representación tienen diferentes tamaños de forma intencionada, no utilice el atributo duration. Este tratamiento solamente funciona cuando los segmentos tienen un tamaño coherente.

A continuación, se muestra un ejemplo de un manifiesto compactado.
<AdaptationSet mimeType="video/mp4" segmentAlignment="true" subsegmentAlignment="true" startWithSAP="1" subsegmentStartsWithSAP="1" bitstreamSwitching="true"> <SegmentTemplate timescale="30000" media="index_video_$RepresentationID$_0_$Number$.mp4?m=1543947824" initialization="index_video_$RepresentationID$_0_init.mp4?m=1543947824" startNumber="1"> <SegmentTimeline> <S t="62000" d="60000" r="9"/> </SegmentTimeline> </SegmentTemplate> <Representation id="1" width="640" height="360" frameRate="30/1" bandwidth="749952" codecs="avc1.640029"/> <Representation id="2" width="854" height="480" frameRate="30/1" bandwidth="1000000" codecs="avc1.640029"/> <Representation id="3" width="1280" height="720" frameRate="30/1" bandwidth="2499968" codecs="avc1.640029"/> </AdaptationSet>
A continuación, se muestra un ejemplo de un manifiesto compactado con el atributo duration.
<AdaptationSet mimeType="video/mp4" segmentAlignment="true" subsegmentAlignment="true" startWithSAP="1" subsegmentStartsWithSAP="1" bitstreamSwitching="true"> <SegmentTemplate timescale="30000" media="index_video_$RepresentationID$_0_$Number$.mp4?m=1543947824" initialization="index_video_$RepresentationID$_0_init.mp4?m=1543947824" startNumber="1" duration="60000"/> <Representation id="1" width="640" height="360" frameRate="30/1" bandwidth="749952" codecs="avc1.640029"/> <Representation id="2" width="854" height="480" frameRate="30/1" bandwidth="1000000" codecs="avc1.640029"/> <Representation id="3" width="1280" height="720" frameRate="30/1" bandwidth="2499968" codecs="avc1.640029"/> </AdaptationSet>