

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Attribut `duration` dans le `SegmentTemplate`
<a name="segtemp-format-duration"></a>

Dans un manifeste DASH par défaut, `SegmentTemplate` contient un `SegmentTimeline`. La chronologie décrit tous les segments dans `Representation`, y compris leur durée et leur heure de début. Avec les événements en direct, AWS Elemental MediaPackage ajoute des segments à la chronologie au fur et à mesure qu'elle les reçoit de votre encodeur. Pour être au courant des nouveaux segments disponibles, le périphérique de lecture doit régulièrement demander un manifeste mis à jour à MediaPackage.

Si tous les segments d'une représentation ont la même durée, vous pouvez contribuer à réduire la latence et à raccourcir le manifeste en MediaPackage permettant de supprimer les `SegmentTimeline` objets. MediaPackage Ajoute à leur place un `duration` attribut aux `SegmentTemplate` propriétés. L’appareil de lecture calcule à quel moment les segments sont disponibles en utilisant `duration` et `startNumber`. Étant donné que l’appareil de lecture n'a pas besoin d’un manifeste actualisé pour connaître la disponibilité des segments, il ne doit pas demander en permanence des mises à jour pour maintenir la lecture. Pour plus d'informations sur le fonctionnement de l’attribut `duration`, consultez les sections suivantes.

**Rubriques**
+ [Fonctionnement de `duration` l'attribut](#how-stemp-dur-works)
+ [`duration`Attribut avec manifestes DASH compactés](#stemp-dur-combos)

## Fonctionnement de `duration` l'attribut
<a name="how-stemp-dur-works"></a>

Activez l’attribut `$duration$` par l’intermédiaire du paramètre **Segment template format (Format du modèle de segment)** sur le point de terminaison DASH, comme décrit dans [Création d'un point de terminaison DASH](endpoints-dash.md). Voici ce qui se produit avec le manifeste : 

1. Lors AWS Elemental MediaPackage de la génération du manifeste DASH, il ajoute l'`duration`attribut à l'`SegmentTemplate`objet, comme illustré dans l'exemple suivant :  
**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"/>
   ```

   Le modèle de segment n’inclut pas de chronologie de segment ni de descriptions de segments.
**Important**  
À l'exception du segment final, les segments ne doivent pas présenter d’écart supérieur à 50 % par rapport à la valeur de la durée. Avec une durée de 90 000, les segments doivent être compris entre 45 000 et 135 000 (1,5 à 4,5 secondes sur une échelle de temps de 30 000).   
**Example**  

   Voici un exemple d'ensemble d’adaptation qui utilise la `duration` dans le modèle de segment :

   ```
   <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. Le périphérique de lecture demande des segments à l'aide de l'URL définie dans l'`media`attribut. Dans l'URL, il remplace la variable `$Number$` par le numéro du segment, en commençant par la valeur de l'attribut `startNumber` dans le `SegmentTemplate` pour le premier segment.

1. Si votre appareil de lecture a besoin de déterminer le segment le plus récent, il utilise cette formule :

   ((heure horloge - `availabilityStartTime` ) / (`duration` / `timescale` )) \$1 `startNumber`  
**Example**  

   Un appareil de lecture calcule le segment le plus récent avec les valeurs suivantes :
   + Heure de l'horloge murale depuis l'appareil de lecture : 2018-11-16T 19:18:30 Z
   + `availabilityStartTime`- Attribut de l'`MPD`objet du manifeste : 2018-11-16T 19:08:30 Z
   + `duration`- Attribut de l'`SegmentTemplate`objet du manifeste : 90000
   + `timescale`- Attribut issu du `SegmentTemplate` : 30000
   + `startNumber`- Attribut issu du `SegmentTemplate` : 175032

   Le calcul utilisé est ((2018-11-16T19:18:30Z - 2018-11-16T19:08:30Z) / (90000/30000)) \$1 175032

   Ce calcul devient alors (600 secondes temps écoulé) / (3 secondes durées de segments) = 200 segments écoulés. L’ajout de ces segments au segment de départ 175032 génère le segment le plus récent 175232.

## `duration`Limitations des attributs
<a name="stemp-limitations"></a>

Pour garantir une lecture correcte et éviter les problèmes liés à des durées de segment contradictoires, AWS Elemental MediaPackage applique les limites suivantes à l'`duration`attribut :
+ Vous pouvez activer la fonctionnalité uniquement lorsque vous créez le point de terminaison. 

  Vous ne pouvez pas modifier le point de terminaison pour ajouter ultérieurement l’attribut `duration` à vos manifestes DASH. Ceci inclut la modification d'un format de modèle de segment afin qu’il utilise l’attribut `duration`. Par exemple, vous ne pouvez pas créer de point de terminaison qui utilise la variable `$Time$` avec `SegmentTimeline`, puis modifier le point de terminaison pour qu’il utilise la variable `$Number$` avec `duration`.
+ Vous devez conserver la valeur **durée du segment** que vous définissez lorsque vous créez le point de terminaison.

  Vous ne pouvez pas modifier le point de terminaison pour modifier la durée du segment.
+ Vous devez générer des manifestes DASH à période unique à partir de points de terminaison qui utilisent l’attribut `duration`.

  Vous ne pouvez pas utiliser de manifestes DAH à plusieurs périodes avec l’attribut `duration`.
+ Votre flux d'ingestion doit utiliser une cadence de segmentation régulière.
+ Vous ne pouvez pas utiliser de longueur de segment variable dans le flux d'ingestion. Par exemple, résultant d'une segmentation liée au SCTE-35.

## `duration`Attribut avec manifestes DASH compactés
<a name="stemp-dur-combos"></a>

L’association de manifestes compressés avec l’attribut `duration` réduit encore un peu plus la taille du manifeste, mais pas de beaucoup. Les manifestes compressés disposent d’un `SegmentTemplate` et d’une `SegmentTimeline` par ensemble d’adaptation. Lorsque vous utilisez l'`duration`attribut, il AWS Elemental MediaPackage supprime la chronologie du segment. Avec les deux traitements, le manifeste dispose d’un `SegmentTemplate` par ensemble d’adaptation et d’aucune `SegmentTimeline`. Voir les exemples suivantes.

Pour plus d'informations sur les manifestes compressés, consultez [Manifestes DASH compactés](compacted.md).

**Important**  
Si les segments d’une représentation disposent intentionnellement de différentes tailles de segments, n'utilisez pas l'attribut `duration`. Ce traitement fonctionne uniquement lorsque les segments présentent une taille constante.

**Example**    
Voici un exemple de manifeste compressé :  

```
<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>
```  
Voici un exemple de manifeste compacté avec l'`duration`attribut :  

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