# Implemente cache HLS para streaming ao vivo

import DocButton from '~/components/webkit/DocButton.vue';
import Tabs from '~/components/tabs/Tabs'
import Code from '~/components/Code/Code.astro'

A Azion Web Platform permite que você [entregue conteúdo de streaming ao vivo no formato HLS](https://www.azion.com/pt-br/solucoes/live-streaming/), capacitando-lhe a autoprovisionar e configurar suas política de cache facilmente. Este guia abrange o passo a passo para implementar o cache HLS, gerenciar o cache de chunks e playlists, configurar regras no Rules Engine e utilizar o Object Storage para uma entrega de vídeo otimizada.

---

## Pré-requisitos

- Uma application existente na Azion, ou [crie uma nova](/pt-br/documentacao/produtos/guias/build/criar-uma-aplicacao/).
- [Um domínio associado à application](/pt-br/documentacao/produtos/guias/configurar-dominio/).
- [Tiered Cache habilitado](/pt-br/documentacao/produtos/guias/billing-and-subscriptions/) em sua conta.
- Acesso ao [Object Storage da Azion](/pt-br/documentacao/produtos/store/object-storage/) para armazenar conteúdo de vídeo.

---

## Implemente políticas de cache HLS

Para implementar políticas de cache HLS na application, siga os passos explicados embaixo.

Neste exemplo, uma application e um domínio vinculado a ela já foram previamente criados.

### Crie uma política de cache para os chunks

Primeiro, você deve criar uma política de cache para os chunks:

<Tabs client:visible>
    <Fragment slot="tab.cli">CLI </Fragment>
    <Fragment slot="tab.console">Console </Fragment>

<Fragment slot="panel.cli">
1. Abra a [Azion CLI](/pt-br/documentacao/produtos/azion-cli/visao-geral/) no seu terminal.
2. Obtenha os detalhes de uma application existente usando o [comando list](/pt-br/documentacao/devtools/cli/list/): `azion list edge-application --details`
3. Habilite o Tiered Cache para sua application: `$ azion update edge-application --application-id 1234 --l2-caching true`
4. Crie uma origem: `$ azion create origin --application-id 1234 --name "origin-edge" --origin-type single_origin --addresses "example.com" --host-header "example.com"`
5. Configure a política de cache para os chunk: `$ azion create cache-setting --application-id 1234 --name "chunks-policy" --browser-cache-settings "override" --browser-cache-settings-maximum-ttl 0 --cdn-cache-settings "override" --cnd-cache-settings-maximum-ttl 60`
- Defina os comportamentos de **Advanced Cache Key** de acordo com suas necessidades. Verifique as flags opcionais para o [comando create](/pt-br/documentacao/devtools/cli/create/#flags-opcionais-3).
- A recomendação é selecionar **Content does not vary**, para **Query String** and/or **Cookies**, conforme suas necessidades.
</Fragment>

<Fragment slot="panel.console">
1. Acesse o [Azion Console](https://console.azion.com).
2. Vá para **Products menu** > **Applications**.
3. Selecione sua aplicação.
4. Abra a aba **Cache Settings** e clique no botão **+ Cache Setting** para criar a nova política de cache:
- Dê um nome único.
- Na seção **Cache Expiration Policies**:
    - Para **Browser Cache Settings**, selecione **Override Cache Setting** e defina um **Maximum TTL** de `0`.
    - Para **Cache Settings**, selecione **Override Cache Setting** e defina um **Maximum TTL** de `60`.
- Ative o interruptor do **Tiered Cache**.
- Na seção **Advanced Cache Key**, defina o comportamento da sua aplicação em relação à segmentação de cache dos objetos.
    - A recomendação é selecionar **Content does not vary**, para **Query String** and/or **Cookies**, conforme suas necessidades.
5. Clique no botão **Save**.
</Fragment>

</Tabs>

### Crie uma política de cache para a playlist

<Tabs client:visible>
    <Fragment slot="tab.cli">CLI </Fragment>
    <Fragment slot="tab.console">Console </Fragment>

<Fragment slot="panel.cli">
Agora configure a política de cache para a playlist: `$ azion create cache-setting --application-id 1234 --name "playlist-policy" --browser-cache-settings "override" --browser-cache-settings-maximum-ttl 0 --cdn-cache-settings "override" --cnd-cache-settings-maximum-ttl 5`
- Defina os comportamentos de **Advanced Cache Key** de acordo com suas necessidades. Verifique as flags opcionais para o [comando create](/pt-br/documentacao/devtools/cli/create/#flags-opcionais-3).
- A recomendação é selecionar **Content does not vary**, para **Query String** and/or **Cookies**, conforme suas necessidades.
</Fragment>

<Fragment slot="panel.console">
Ainda na aba **Cache Settings**:

1. Clique o botão **+ Cache Setting** de novo para criar a nova política de cache para a playlist:
- Dê um nome único.
- Na seção **Cache Expiration Policies**:
    - Para **Browser Cache Settings**, selecione **Override Cache Setting** e defina um **Maximum TTL** de `0`.
    - Para **Cache Settings**, selecione **Override Cache Setting** e defina um **Maximum TTL** de `5`.
- Ative o interruptor do **Tiered Cache**.
- Na seção **Advanced Cache Key**, defina o comportamento da sua aplicação em relação à segmentação de cache dos objetos.
    - A recomendação é selecionar **Content does not vary**, para **Query String** and/or **Cookies**, conforme suas necessidades.
2. Clique no botão **Save**.
</Fragment>

</Tabs>

:::tip
Leia mais sobre a configuração de [cache settings](/pt-br/documentacao/produtos/build/applications/cache-settings/) para suas applications.
:::

### Utilize o Object Storage da Azion para entrega de vídeos HLS

Para entregar vídeos MP4 usando HLS e o Object Storage:

1. Faça o upload dos arquivos de vídeo MP4 para o Object Storage.
2. Configure o seu codificador para converter os arquivos MP4 para o formato HLS e defina o Object Storage como origem.
3. Siga as etapas de configuração da política de cache mencionadas acima para garantir uma entrega eficiente de vídeo.

### Crie regras no Rules Engine

<Tabs client:visible>
    <Fragment slot="tab.cli">CLI </Fragment>
    <Fragment slot="tab.console">Console </Fragment>

<Fragment slot="panel.cli">
1. Primeiro, crie uma regra para os chunks: 
`$ azion create rules-engine --application-id 1234 --phase "request" --file ./chunks-rule.json`

No arquivo `chunks-rule.json`, inclua:

<Code lang="json" code={`
{
    "name": "chunks-rule",
    "description": "This is a description for your chunks rule",
    "criteria": [
        [
            {
                "conditional": "if",
                "variable": "\${uri}",
                "operator": "matches",
                "input_value": ".\*.ts"
            }
        ]
    ],
    "behaviors": [
        {
            "name": "set_cache_policy",
            "target": "chunks-policy"
        }
    ]
}
`} />

2. Logo, crie uma regra para a playlist:
`$ azion create rules-engine --application-id 1234 --phase "request" --file ./playlist-rule.json`

No arquivo `playlist-rule.json`, inclua:

```json
{
    "name": "playlist-cache-rule",
    "description": "This is a description for your playlist rule",
    "criteria": [
        [
            {
                "conditional": "if",
                "variable": "${uri}",
                "operator": "matches",
                "input_value": "\*.m3u8"
            }
        ]
    ],
    "behaviors": [
        {
            "name": "set_cache_policy",
            "target": "playlist-policy"
        }
    ]
}
```
</Fragment>

<Fragment slot="panel.console">
Ainda na página da aplicação, abra a aba **Rules Engine**:

Primeiro, crie uma regra para os chunks:
1. Clique no botão **+ Rule** button.
2. Dê um nome e uma descrição (opcional) à sua regra.
3. Selecione a opção **Request Phase**.
4. Em **Criteria**, defina `if ${uri}` *matches* `.\*.ts`.
5. En **Behaviors**, selecione **Set Cache Policy** e adicione a política para os chunks que você criou no passo anterior.
6. Clique no botão **Save**.

Agora, crie uma regra para a playlist:
1. Clique no botão **+ Rule**.
2. Dê um nome e uma descrição (opcional) à sua regra.
3. Selecione a opção **Request Phase**.
4. Em **Criteria**, defina `if ${uri}` *matches* `\*.m3u8`.
5. Em **Behaviors**, selecione **Set Cache Policy** e adicione a política para a playlist que você criou no passo anterior.
6. Clique no botão **Save**.
</Fragment>

</Tabs>

Pronto! Agora você pode configurar sua fonte e codificador apontando para a Azion e transmitir seu conteúdo, implementando o cache HLS.

:::tip
Acesse a documentação do [Rules Engine for Applications](/pt-br/documentacao/produtos/build/applications/rules-engine/) para mais detalhes.
:::

<DocButton href="/pt-br/documentacao/arquiteturas/live-streaming-delivery/live-streaming-delivery-com-hls/" label="Consulte a arquitetura de Live Streaming Delivery" kind="secondary" size="medium" />