

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

# Formato do modelo de segmento de manifesto DASH
<a name="segtemp-format"></a>

A capacidade de selecionar o formato do modelo de segmento DASH está disponível somente com fluxos de trabalho ativos. AWS Elemental MediaPackage

As seções a seguir descrevem como você pode modificar o objeto `SegmentTemplate` em manifestos DASH para se ajustar melhor às suas necessidades do dispositivo de reprodução.

**Topics**
+ [Atributo `media` no `SegmentTemplate`](segtemp-format-media.md)
+ [Atributo `duration` no `SegmentTemplate`](segtemp-format-duration.md)

# Atributo `media` no `SegmentTemplate`
<a name="segtemp-format-media"></a>

O atributo `media` nas propriedades `SegmentTemplate` define o URL em que os dispositivos de reprodução enviam solicitações de segmento. Por padrão, esse URL usa uma variável `$Number$` para identificar o segmento específico que é solicitado. Quando um dispositivo de reprodução solicita o segmento, ele substitui a variável pelo identificador numérico do segmento. Para o primeiro segmento na representação, substitua esse identificador pelo valor do `startNumber` das propriedades `SegmentTemplate`. Cada segmento adicional é incrementado em um.

No entanto, alguns jogadores navegam melhor pelos segmentos quando estes são identificados pelo timestamp indicando quando a reprodução está disponível. Para oferecer suporte a esse caso de uso, o MediaPackage usa a variável `$Time$` em vez de `$Number$` na URL do atributo `media`. Quando um dispositivo de reprodução solicita o segmento, ele substitui a variável pelo horário de início da disponibilidade do segmento. Esse horário de início é identificado no valor `t` das propriedades do segmento (`S`) no objeto `SegmentTimeline`. Para obter um exemplo, consulte [Como funciona](#how-stemp-works).

## Funcionamento da variável `$Time$`
<a name="how-stemp-works"></a>

Habilite a variável `$Time$` por meio da configuração do **Segment template format (Formato do modelo de segmento)** no endpoint DASH, conforme descrito em [Como criar um endpoint DASH](endpoints-dash.md). O AWS Elemental MediaPackage executa as seguintes ações:

1.  Ao MediaPackage gerar o manifesto DASH, ele usa a `$Time$` variável no `media` valor do `SegmentTemplate` objeto, conforme mostrado no exemplo a seguir:  
**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. Quando um dispositivo de reprodução solicita segmentos, ele usa o URL definido no atributo `media` e substitui a variável pelo horário de início da disponibilidade do segmento que é solicitado.
**Importante**  
O valor que substitui a variável deve ser um valor `t` exato de um segmento. Se a solicitação usar um timestamp arbitrário, o MediaPackage não buscará o segmento mais próximo.  
**Example**  

   Veja a seguir o exemplo de um modelo de segmento para uma representação. Ele usa a variável `$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>
   ```

   A URL de solicitação para o primeiro segmento é **155\$1video\$11\$12\$1*255197799*.mp4**. Com uma duração de 360.360, a próxima solicitação de segmento será **155\$1video\$11\$12\$1*255558159*.mp4**, e assim por diante até o nono segmento. 

   A solicitação do segmento final é **155\$1video\$11\$12\$1*258441039*.mp4**.

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