

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

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, AWS Elemental MediaPackage adiciona segmentos à linha do tempo à medida que os recebe do seu codificador. Para estar ciente dos segmentos recém-disponíveis, o dispositivo de reprodução deve solicitar regularmente um manifesto atualizado 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 MediaPackage ao permitir a remoção dos `SegmentTimeline` objetos. Em seu lugar, MediaPackage adiciona um `duration` atributo às `SegmentTemplate` propriedades. 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.

**Tópicos**
+ [Funcionamento do atributo `duration`](#how-stemp-dur-works)
+ [Atributo `duration` com manifestos DASH compactados](#stemp-dur-combos)

## Funcionamento do atributo `duration`
<a name="how-stemp-dur-works"></a>

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](endpoints-dash.md). Isso é o que acontece com o manifesto: 

1. Quando AWS Elemental MediaPackage gera o manifesto DASH, ele adiciona o `duration` atributo ao `SegmentTemplate` objeto, conforme mostrado no exemplo a seguir:  
**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"/>
   ```

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

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

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

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

   ((hora do relógio - `availabilityStartTime` ) / (`duration` / `timescale` )) \$1 `startNumber`  
**Example**  

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

Para garantir a reprodução adequada e ajudar a evitar problemas com durações de segmentos conflitantes, AWS Elemental MediaPackage impõe as seguintes limitações para o 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
<a name="stemp-dur-combos"></a>

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 `duration` atributo, 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 de a seguir.

Para obter mais informações sobre manifestos compactados, consulte [Manifestos DASH compactados](compacted.md).

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

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