---
name: azion-implemente-cache-hls-para-streaming-ao-vivo
description: >-
  Dê aos segmentos e à playlist de um stream HLS cache settings e regras próprias, pelo Azion Console ou pela Azion API.
---

# Implemente cache HLS para streaming ao vivo

Um stream HLS é entregue como dois tipos de arquivo, e eles não pedem o mesmo cache. Você dá a cada um um cache setting próprio e o aplica com uma regra do [Rules Engine](/pt-br/documentacao/plataforma/applications/rules-engine/) que casa a extensão do arquivo, pelo Azion Console ou pela Azion API v4.

Um arquivo de segmento é escrito uma vez e nunca muda, então ele recebe o TTL de cache mais longo. A playlist é reescrita conforme o stream avança, então ela recebe um TTL de poucos segundos. O TTL de playlist que este guia usa está abaixo de 60 segundos, o que exige o [Application Accelerator](/pt-br/documentacao/plataforma/applications/#application-accelerator) na aplicação.

---

## Pré-requisitos

- Uma aplicação que entrega a playlist e os segmentos do seu stream. Para criar uma, consulte [Primeiros passos com Applications](/pt-br/documentacao/plataforma/applications/primeiros-passos/).
- Um domínio no workload que entrega a aplicação. Para mais informações, consulte [Workloads](/pt-br/documentacao/plataforma/workloads/).
- O Application Accelerator ativo na aplicação. Para os passos, consulte [Configure políticas de cache para uma aplicação](/pt-br/documentacao/guias/performance-e-confiabilidade/cache-e-purge/cache-settings/), cuja primeira tarefa ativa o módulo.
- Acesso ao Azion Console, para os procedimentos pelo Console. Consulte [Como acessar o Azion Console](/pt-br/documentacao/guias/plataforma/conta-e-billing/como-acessar-o-azion-console/).
- Um [personal token](/pt-br/documentacao/guias/plataforma/conta-e-billing/personal-tokens/), para os procedimentos pela API.

Arquivos de vídeo armazenados no [Object Storage](/pt-br/documentacao/plataforma/object-storage/) podem servir como origem do stream: envie os arquivos de vídeo e aponte o encoder que produz a saída HLS para o bucket.

---

## Crie o cache setting dos segmentos

Os segmentos recebem um TTL de cache de 60 segundos e um TTL de browser de 0 segundos. Para criar o setting:

1. **Abra a aplicação**

   Acesse [Azion Console](https://console.azion.com/) > **Applications** e selecione a aplicação que entrega o stream.

2. **Vá para a aba Cache Settings**

3. **Selecione + Cache**

4. **Nomeie o cache setting**

   Em **Name**, insira `hls-segments`.

5. **Defina o browser cache**

   Em **Browser Cache**, selecione *Override cache settings* e defina o TTL como `0`.

6. **Defina o Max Age**

   Em **Cache**, mantenha *Override cache behavior* selecionado e, em **Max Age**, insira `60`.

7. **Ative o Tiered Cache**

   O toggle está na mesma seção. Ele adiciona uma segunda camada de cache entre o cache da Azion e a sua origem.

8. **Selecione Save**

O setting aparece na lista de **Cache Settings**.

---

## Crie o cache setting da playlist

A playlist recebe um TTL de cache de 5 segundos, para que um cliente que a lê receba os segmentos que o encoder já escreveu. Para criar o setting:

1. **Selecione + Cache**

2. **Nomeie o cache setting**

   Em **Name**, insira `hls-playlist`.

3. **Defina o browser cache**

   Em **Browser Cache**, selecione *Override cache settings* e defina o TTL como `0`.

4. **Defina o Max Age**

   Em **Cache**, mantenha *Override cache behavior* selecionado e, em **Max Age**, insira `5`.

5. **Ative o Tiered Cache**

6. **Selecione Save**

Os dois settings agora aparecem na lista, e nenhum dos dois se aplica a uma requisição ainda.

> **nota**
>
> Um **Max Age** abaixo de 60 segundos exige o Application Accelerator na aplicação. Sem o módulo, a API rejeita o setting com o erro `21021`. Para o piso, consulte [Limites de Applications](/pt-br/documentacao/plataforma/applications/limites/#cache).

---

## Aplique os settings com regras

Cada setting precisa de uma regra que case a sua extensão de arquivo. Para criar a regra dos segmentos:

1. **Vá para a aba Rules Engine**

2. **Selecione + Rule**

3. **Nomeie a regra**

   Insira `cache-hls-segments`.

4. **Selecione Request Phase**

5. **Defina os criteria**

   Em **Criteria**, selecione `${uri}`, o operador *matches* e insira `.*.ts` como argumento.

6. **Adicione o behavior Set Cache Policy**

   Em **Behaviors**, selecione **Set Cache Policy** e depois selecione `hls-segments`.

7. **Selecione Save**

Repita o procedimento para a playlist: nomeie a regra `cache-hls-playlist`, insira `.*.m3u8` como argumento dos criteria e selecione `hls-playlist` como cache policy.

As duas regras agora aparecem na lista, e cada uma aplica o seu setting aos arquivos que o seu padrão casa.

> **nota**
>
> Uma regra nova pode levar alguns minutos para propagar.

---

## Configure pela API

Os mesmos dois settings e as mesmas duas regras são criados com quatro requisições. Para criar os cache settings:

1. **Crie o setting dos segmentos**

   ```bash
   curl --location --request POST 'https://api.azion.com/v4/workspace/applications/{application_id}/cache_settings' \
   --header 'Accept: application/json' \
   --header 'Content-Type: application/json' \
   --header 'Authorization: Token [TOKEN VALUE]' \
   --data '{
     "name": "hls-segments",
     "browser_cache": { "behavior": "override", "max_age": 0 },
     "modules": {
       "cache": {
         "behavior": "override",
         "max_age": 60,
         "tiered_cache": { "enabled": true, "topology": "nearest-region" }
       }
     }
   }'
   ```

2. **Leia o id na resposta**

   A API responde com HTTP `201` e o novo setting em `data`:

   ```json
   {"state":"executed","data":{"id":123456,"name":"hls-segments","browser_cache":{"behavior":"override","max_age":0},"modules":{"cache":{"behavior":"override","max_age":60,"tiered_cache":{"topology":"nearest-region","enabled":true}}}}}
   ```

3. **Crie o setting da playlist**

   Envie a mesma requisição com `"name": "hls-playlist"` e `"max_age": 5` em `modules.cache`. A resposta carrega o seu próprio `id`.

Para aplicar cada setting com uma regra:

1. **Crie a regra dos segmentos**

   Substitua `[CACHE SETTING ID]` pelo `id` do setting `hls-segments`:

   ```bash
   curl --location --request POST 'https://api.azion.com/v4/workspace/applications/{application_id}/request_rules' \
   --header 'Accept: application/json' \
   --header 'Content-Type: application/json' \
   --header 'Authorization: Token [TOKEN VALUE]' \
   --data '{
     "name": "cache-hls-segments",
     "criteria": [[{ "variable": "${uri}", "operator": "matches", "conditional": "if", "argument": ".*.ts" }]],
     "behaviors": [{ "type": "set_cache_policy", "attributes": { "value": "[CACHE SETTING ID]" } }]
   }'
   ```

2. **Leia a resposta**

   A API responde com HTTP `202` e a regra com `state` igual a `pending`:

   ```json
   {"state":"pending","data":{"id":123457,"name":"cache-hls-segments","active":true,"order":0}}
   ```

3. **Crie a regra da playlist**

   Envie a mesma requisição com `"name": "cache-hls-playlist"`, o argumento `.*.m3u8` e o `id` do setting `hls-playlist`.

O stream agora é colocado em cache por tipo de arquivo: cada segmento por 60 segundos, a playlist por 5 segundos.

---

## Próximos passos

- [Cache settings](/pt-br/documentacao/plataforma/applications/cache/cache-settings.md): Todos os campos de um cache setting, com o seu tipo, o seu padrão e os seus limites.
- [Expiração e atualização](/pt-br/documentacao/plataforma/applications/cache/expiracao-e-atualizacao.md): O que o TTL faz em uma requisição, e o que a segunda camada de cache altera.
- [Purgue conteúdo em cache](/pt-br/documentacao/guias/performance-e-confiabilidade/cache-e-purge/purgar-conteudo-em-cache.md): Remova um segmento ou uma playlist do cache antes do fim do seu TTL.
- [Verifique o status de cache de uma resposta](/pt-br/documentacao/guias/performance-e-confiabilidade/cache-e-purge/verificar-tempo-de-cache-da-pagina.md): Confirme que uma requisição de segmento é respondida pelo cache.
