Atributo duration no SegmentTemplate - AWS Elemental MediaPackage

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Atributo duration no SegmentTemplate

Em um manifesto DASH padrão, SegmentTemplate contém um SegmentTimeline. A linha do tempo descreve todos os segmentos na Representation, incluindo a duração e o horário de início. Com eventos ao vivo, o AWS Elemental MediaPackage adiciona segmentos à linha do tempo à medida que os recebe de seu codificador. Para estar ciente dos segmentos recém-disponibilizados, o dispositivo de reprodução deve solicitar um manifesto atualizado regularmente do MediaPackage.

Se todos os segmentos em uma representação tiverem a mesma duração, você poderá ajudar a reduzir a latência e encurtar o manifesto permitindo que o MediaPackage remova os objetos SegmentTimeline. Em seu lugar, o MediaPackage adicionará um atributo duration às propriedades de SegmentTemplate. O dispositivo de reprodução calcula quando os segmentos estão disponíveis usando duration e startNumber. Como o dispositivo de reprodução não precisa contar com um manifesto atualizado para saber sobre segmentos, ele não precisa solicitar atualizações constantemente para manter a reprodução. Para obter informações sobre como o atributo duration funciona, consulte as seções a seguir.

Funcionamento do atributo duration

Habilite o atributo $duration$ por meio da configuração Segment template format (Formato do modelo de segmento) no endpoint DASH, conforme descrito em Como criar um endpoint DASH. Isso é o que acontece com o manifesto:

  1. Quando o AWS Elemental MediaPackage gera o manifesto DASH, ele adiciona o atributo duration ao objeto SegmentTemplate, conforme mostrado no exemplo a seguir:

    <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"/>

    A linha do tempo de um segmento e as descrições individuais de segmentos não são incluídas no modelo de segmento.

    Importante

    Com exceção do último segmento, os segmentos não devem ter um desvio maior que 50% em relação ao valor da duração. Com uma duração de 90000, os segmentos devem ter entre 45000 e 135000 (1,5 a 4,5 segundos com uma escala de tempo de 30000).

    Veja a seguir um exemplo de uma definição de adaptação que usa duration no modelo de segmento:

    <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. O dispositivo de reprodução solicita segmentos usando o URL definido no atributo media. Na URL, ele substitui a variável $Number$ pelo número do segmento, começando com o valor do startNumber no SegmentTemplate para o primeiro segmento.

  3. Se seu dispositivo de reprodução precisar determinar o segmento mais recente, ele usará esta fórmula:

    ((hora do relógio - availabilityStartTime ) / (duration / timescale )) + startNumber

    Um dispositivo de reprodução está calculando o segmento mais recente com os seguintes valores:

    • Hora do relógio de referência do dispositivo de reprodução: 2018-11-16T19:18:30Z

    • availabilityStartTime: atributo do objeto MPD do manifesto: 2018-11-16T19:08:30Z

    • duration: atributo do objeto SegmentTemplate do manifesto: 90000

    • timescale: atributo de SegmentTemplate: 30000

    • startNumber: atributo de SegmentTemplate: 175032

    O cálculo que ele usa é ((2018-11-16T19:18:30Z - 2018-11-16T19:08:30Z) / (90000/30000)) + 175032

    Esse cálculo, por sua vez, torna-se (tempo decorrido de 600 segundos) / (durações de segmentos de 3 segundos) = 200 segmentos decorridos. A adição desses segmentos ao segmento de início 175032 torma o segmento 175232 o mais recente.

Limitações do atributo duration

Para garantir a reprodução adequada e ajudar a evitar problemas com durações de segmento conflitantes, o AWS Elemental MediaPackage impõe as seguintes limitações ao atributo duration:

  • Você pode habilitar o recurso somente ao criar o endpoint.

    Você não pode modificar o endpoint posteriormente para adicionar o atributo duration a seus manifestos DASH. Isso inclui a alteração de um formato de modelo de segmento para um formato que usa duration. Por exemplo, você não pode criar um endpoint que usa a variável $Time$ com SegmentTimeline e depois editar o endpoint para usar a variável $Number$ com duration.

  • Você deve manter o valor de segment duration (duração do segmento) que você define ao criar o endpoint.

    Você não pode editar o endpoint para modificar a duração do segmento.

  • Você deve gerar manifestos DASH de período único dos endpoints que usam duration.

    Você não pode usar DASH de vários períodos com o atributo duration.

  • Seu fluxo de ingestão deve usar uma cadência de segmentação regular.

  • Você não pode usar um comprimento de segmento variável no fluxo de ingestão. Por exemplo, um que seja resultante de uma segmentação relacionada ao SCTE-35.

Atributo duration com manifestos DASH compactados

Combinar manifestos compactados com o atributo duration reduzirá ainda mais o tamanho do manifesto, mas não muito. Os manifestos compactados têm um SegmentTemplate e SegmentTimeline por definição de adaptação. Quando você usa o atributo duration, o AWS Elemental MediaPackage remove a linha do tempo do segmento. Com os dois tratamentos, o manifesto tem um SegmentTemplate por definição de adaptação, e nenhum SegmentTimeline. Veja os exemplos a seguir.

Para obter mais informações sobre manifestos compactados, consulte Manifestos DASH compactados.

Importante

Se os segmentos em uma representação tiverem tamanhos de segmentos variados intencionalmente, não use o atributo duration. Esse tratamento funciona somente quando os segmentos são de um tamanho consistente.

Veja a seguir um exemplo de um manifesto 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>
Veja a seguir um exemplo de um manifesto compactado com o 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>