Attribut duration dans le SegmentTemplate - AWS Elemental MediaPackage

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

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 de leur réception depuis 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.

Fonctionnement de duration l'attribut

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. Voici ce qui se produit avec le manifeste :

  1. Lorsque AWS Elemental MediaPackage génère le manifeste DASH, il ajoute l'attribut duration à l’objet SegmentTemplate, comme illustré dans l'exemple suivant :

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

    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>
  2. Le périphérique de lecture demande des segments à l'aide de l'URL définie dans l'mediaattribut. 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.

  3. 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 )) + startNumber

    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'MPDobjet du manifeste : 2018-11-16T 19:08:30 Z

    • duration- Attribut de l'SegmentTemplateobjet 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)) + 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.

durationLimites relatives aux attributs

Pour garantir une lecture correcte et éviter les problèmes de conflits au niveau des durées de segments, AWS Elemental MediaPackage applique les restrictions suivantes pour l'attribut duration :

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

durationAttribut avec manifestes DASH compactés

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'attribut duration, 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.

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.

Voici un exemple de manifeste compacté :
<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'durationattribut :
<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>