

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`
<a name="segtemp-format-duration"></a>

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. En el caso de los eventos en directo, AWS Elemental MediaPackage añade segmentos a la línea temporal 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 a MediaPackage.

Si todos los segmentos de una representación tienen la misma duración, puedes ayudar a reducir la latencia y acortar el manifiesto si permites MediaPackage eliminar los `SegmentTimeline` objetos. En su lugar, MediaPackage añade un `duration` atributo a las `SegmentTemplate` propiedades. 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.

**Temas**
+ [Cómo funciona el atributo `duration`](#how-stemp-dur-works)
+ [Atributo `duration` con manifiestos DASH compactados](#stemp-dur-combos)

## Cómo funciona el atributo `duration`
<a name="how-stemp-dur-works"></a>

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](endpoints-dash.md). Esto es lo que ocurre con el manifiesto: 

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

   ```
   <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).   
**Example**  

   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>
   ```

1. 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.

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

   ((hora del reloj - `availabilityStartTime`) / (`duration` / `timescale`)) \$1 `startNumber`  
**Example**  

   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)) \$1 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`
<a name="stemp-limitations"></a>

Para garantizar una reproducción adecuada y evitar problemas relacionados con duraciones de segmento conflictivas, AWS Elemental MediaPackage aplica las siguientes limitaciones al 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
<a name="stemp-dur-combos"></a>

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. Al utilizar el `duration` atributo, 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 de .

Para obtener más información acerca de los manifiestos compactados, consulte [Manifiestos de DASH compactos](compacted.md).

**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.

**Example**    
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>
```