

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.

# Format de modèle de segment de manifeste DASH
<a name="segtemp-format"></a>

La possibilité de sélectionner le format du modèle de segment DASH est disponible uniquement avec les flux de travail en direct AWS Elemental MediaPackage.

Les sections suivantes décrivent comment vous pouvez modifier l' objet `SegmentTemplate` dans les manifestes DASH pour mieux répondre aux exigences de votre appareil de lecture.

**Topics**
+ [Attribut `media` dans `SegmentTemplate`](segtemp-format-media.md)
+ [Attribut `duration` dans le `SegmentTemplate`](segtemp-format-duration.md)

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

L’attribut `media` dans les propriétés `SegmentTemplate` définit l’URL où les périphériques de lecture envoient les requêtes de segment. Par défaut, cette URL utilise une `$Number$` variable pour identifier le segment spécifique demandé. Lorsqu’un périphérique de lecture demande le segment, il remplace la variable par l’identifiant numéroté du segment. Pour le premier segment dans la représentation, remplacez cet identifiant par la valeur de `startNumber` issue des propriétés `SegmentTemplate`. Chaque segment supplémentaire ajoute un incrément.

Certains acteurs parcourent les segments mieux lorsque ces segments sont plutôt identifiés par l’horodatage lorsque la lecture est disponible. Pour prendre en charge ce cas d’utilisation, MediaPackage utilise la variable `$Time$` au lieu de `$Number$` dans l’URL de l’attribut `media`. Lorsqu’un périphérique de lecture demande le segment, il remplace la variable par l’heure de début de la disponibilité du segment. Cette heure de début est identifiée dans les propriétés de la valeur `t` du segment (`S`), dans l’objet `SegmentTimeline`. Pour obtenir un exemple, consultez la section [Fonctionnement](#how-stemp-works).

## Fonctionnement de la `$Time$` variable
<a name="how-stemp-works"></a>

Activez la variable `$Time$` via le 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). AWS Elemental MediaPackage effectue les actions suivantes :

1.  Lors MediaPackage de la génération du manifeste DASH, il utilise la `$Time$` variable dans la `media` valeur de l'`SegmentTemplate`objet, comme indiqué dans l'exemple suivant :  
**Example**  

   ```
   <SegmentTemplate timescale="30" media="index_video_1_0_$Time$.mp4?m=1122792372" initialization="index_video_1_0_init.mp4?m=1122792372" startNumber="2937928">
   ```

1. Lorsqu'un appareil de lecture demande des segments, il utilise l'URL définie dans l'`media`attribut et remplace la variable par l'heure de début de disponibilité du segment demandé.
**Important**  
La valeur qui remplace la variable doit être une valeur `t` exacte d’un segment. Si la demande utilise un horodatage arbitraire, MediaPackage ne recherche pas le segment le plus proche.  
**Example**  

   L’exemple suivant est celui d’un modèle de segment issu d’une représentation. Il utilise la variable `$Time$` :

   ```
   <SegmentTemplate timescale="30000" media="155_video_1_2_$Time$.mp4?m=1545421124" initialization="155_video_1_2_init.mp4?m=1545421124" startNumber="710">
     <SegmentTimeline>
          <S t="255197799" d="360360" r="8"/>
          <S t="258441039" d="334334"/>
     </SegmentTimeline>
   </SegmentTemplate>
   ```

   L’URL de demande pour le premier segment est **155\$1video\$11\$12\$1*255197799*.mp4**. Avec une durée de 360360, la demande de segment suivant est **155\$1video\$11\$12\$1*255558159*.mp4**, et ainsi de suite jusqu’au neuvième segment. 

   La demande de segment final est **155\$1video\$11\$12\$1*258441039*.mp4**.

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