Quando um cliente solicita um arquivo M3U8, este recurso anexa automaticamente os parâmetros de autenticação da requisição à URI da chave na tag #EXT-X-KEY. Isso protege o acesso às suas chaves de criptografia sem modificar o servidor de origem e impede a reprodução não autorizada de vídeo.
Casos de uso
Em um fluxo de trabalho padrão de criptografia HLS, a tag #EXT-X-KEY especifica a URI para obter a chave de descriptografia. Se essa URI for um endereço público fixo e desprotegido, qualquer pessoa que obtenha o arquivo M3U8 poderá baixar a chave e descriptografar o conteúdo de vídeo, tornando a criptografia ineficaz.
Este recurso resolve o problema ao anexar um token de autenticação dinâmico e verificável a cada requisição de chave. É ideal para cenários que exigem controle de acesso sobre chaves de criptografia HLS, como:
Vídeo pago e educação online: Para impedir que usuários compartilhem URLs M3U8 com pessoas não pagantes, gere um parâmetro de autenticação exclusivo para cada usuário conectado. Isso garante que apenas usuários autorizados possam obter a chave de descriptografia dentro do período de validade.
Proteção de direitos autorais de transmissões ao vivo: Em grandes eventos esportivos ou transmissões ao vivo, combine parâmetros de autenticação gerados dinamicamente com a autenticação de URL da CDN. Isso permite um controle de acesso refinado sobre a transmissão ao vivo e previne eficazmente o hotlinking.
Como funciona
Um cliente envia uma requisição ao seu servidor de aplicativos. Com base na sua lógica de negócios, como login de usuário, o servidor de aplicativos gera um parâmetro de autenticação com período de validade e assinatura (por exemplo,
token=xxxx) e o retorna ao cliente.O cliente anexa esse parâmetro de autenticação ao final da URL de requisição do arquivo M3U8 e envia uma requisição M3U8 para um ponto de presença (PoP) da CDN.
Antes de retornar o arquivo M3U8, o PoP da CDN analisa seu conteúdo, localiza a tag
#EXT-X-KEYe anexa o parâmetro de autenticação da URL de requisição do cliente ao final do atributoURIda tag.O cliente recebe o arquivo M3U8 reescrito da CDN e envia uma requisição ao servidor de chaves usando a nova URI da chave, que agora inclui o parâmetro de autenticação.
O servidor de chaves recebe a requisição, extrai o parâmetro de autenticação da URL e o valida. Se a validação for bem-sucedida, ele retorna a chave de descriptografia. Caso contrário, nega a requisição.
Após obter a chave, o cliente descriptografa o fluxo de vídeo TS e inicia a reprodução.
Este recurso não criptografa o conteúdo de vídeo. Antes de usá-lo, certifique-se de que os segmentos de vídeo (arquivos TS) no seu servidor de origem estejam criptografados com base em um padrão HLS, como AES-128. O arquivo M3U8 original também deve conter a tag #EXT-X-KEY correta. Para obter mais informações sobre criptografia de vídeo, consulte Como gerar e criptografar um arquivo M3U8.
O servidor de aplicativos e o servidor de chaves aparecem aqui para ilustrar o fluxo geral. Você deve implementá-los por conta própria para concluir o processo de autenticação de chave HLS.
A tag
#EXT-X-KEYespecifica se o conteúdo está criptografado. Para obter mais informações sobre tags de arquivos M3U8, consulte O que há em um arquivo HLS M3U8.
Procedimento
Faça login no CDN console.
No painel de navegação à esquerda, clique em Domain Names.
Na página Domain Names, localize o nome de domínio desejado e clique em Manage na coluna Actions.
No painel de navegação do domínio, clique em Video.
-
Na seção M3U8 Encryption and Rewrite, ative a chave M3U8 Encryption and Rewrite.
NotaApós ativar a opção M3U8 Encryption and Rewrite, o nome do parâmetro padrão é
MtsHlsUriToken. -
Opcional: Para modificar o nome do parâmetro e adequá-lo ao seu cliente, execute as etapas a seguir:
Clique em Modify ao lado de Custom Parameter Name.
-
Na caixa de diálogo Custom Parameter Name, defina o Parameter Name.
Se você não especificar um valor, o nome do parâmetro será definido por padrão como
MtsHlsUriToken.NotaOs nomes dos parâmetros diferenciam maiúsculas de minúsculas. Certifique-se de que o nome do parâmetro definido corresponda exatamente ao nome do parâmetro nas requisições do cliente. Por exemplo, se a requisição do cliente incluir o parâmetro
MtsHlsUriTokene você definir o nome do parâmetro personalizado no console da CDN comomtshlsuritoken, a configuração não terá efeito. Clique em OK para concluir a configuração.
Exemplo
-
Acesse o arquivo M3U8 acelerado pela CDN no seu navegador e anexe MtsHlsUriToken=tokenxxxxx ao final da requisição. Exemplo: http://<nome de domínio acelerado pela CDN>/video.m3u8?MtsHlsUriToken=tokenxxxxx
Nas ferramentas de desenvolvedor do seu navegador, o painel Network mostra que a requisição do arquivo M3U8 inclui o parâmetro personalizado, mas a requisição de chave subsequente não o inclui.
No console da CDN, ative a opção M3U8 Encryption and Rewrite. Se necessário, defina um nome de parâmetro personalizado (esta demonstração usa o parâmetro padrão
MtsHlsUriToken). No console da CDN, ative o recurso M3U8 encryption and rewrite e defina Custom Parameter Name comoMtsHlsUriToken.-
Repita a Etapa 1. Acesse o arquivo M3U8 acelerado pela CDN em um navegador e anexe MtsHlsUriToken=tokenxxxxx ao final da requisição.
Nas ferramentas de desenvolvedor do seu navegador, no painel Network, você verá que a requisição para o endereço da chave agora inclui o parâmetro personalizado.
A URL de requisição do arquivo de chave
encryption_key.keyinclui o parâmetroMtsHlsUriToken=tokenxxxxx, e a resposta tem um código de status 206 e Content-Length de 16 bytes.
FAQ
O que é o protocolo HLS?
HTTP Live Streaming (HLS) é um protocolo de mídia de streaming baseado em HTTP desenvolvido pela Apple. Ele divide um fluxo de vídeo em pequenos segmentos de Transport Stream (TS) e usa um arquivo de texto com extensão M3U8 como lista de reprodução. Para iniciar a reprodução, um cliente primeiro baixa a lista de reprodução M3U8 e, em seguida, baixa cada segmento de mídia em sequência usando as URLs contidas nela.
O que há em um arquivo HLS M3U8?
Tags básicas do M3U8:
#EXTM3U: Cabeçalho do arquivo. Deve ser a primeira linha da lista de reprodução.EXT-X-MEDIA-SEQUENCE: Número de sequência do primeiro segmento TS. Geralmente 0. Em transmissões ao vivo, identifica o ponto inicial. Por exemplo,#EXT-X-MEDIA-SEQUENCE:0.#EXT-X-TARGETDURATION: Duração máxima de um segmento de mídia. Por exemplo,#EXT-X-TARGETDURATION:10define o máximo como 10 segundos.#EXT-X-ALLOW-CACHE: Indica se o cliente pode armazenar segmentos de mídia em cache. Valores válidos:#EXT-X-ALLOW-CACHE:YESe#EXT-X-ALLOW-CACHE:NO. Padrão: YES.#EXT-X-ENDLIST: Marca o fim da lista de reprodução.#EXTINF: Informações extras sobre um segmento de mídia, como duração e largura de banda. Formato:#EXTINF:<duration>,[<title>]. O valor antes da vírgula é a duração do segmento, que não deve exceder o valor de#EXT-X-TARGETDURATION.#EXT-X-VERSION: Número da versão da lista de reprodução M3U8.#EXT-X-DISCONTINUITY: Sinaliza uma interrupção entre os segmentos de mídia anteriores e seguintes.#EXT-X-PLAYLIST-TYPE: Indica o tipo do fluxo.#EXT-X-KEY: Especifica o método de descriptografia para segmentos de mídia criptografados. Por exemplo:#EXT-X-KEY:METHOD=AES-128,URI="https://example.com/video.key?token=xxx"usa criptografia AES-128. A chave é obtida emhttps://example.com/video.key?token=xxx, armazenada localmente e usada para descriptografar os arquivos TS subsequentes.
Como gerar e criptografar um arquivo M3U8?
-
Gere uma chave de criptografia.
Essa chave é tipicamente uma string aleatória de 16 bytes para criptografia AES-128. Gere um arquivo de chave com o OpenSSL:
openssl rand 16 > encryption_key.key -
Prepare o arquivo
key_info.txt. A ferramenta de criptografia usa este arquivo para criptografar arquivos de vídeo HLS.https://example.com/encryption_key.key /path/to/local/encryption_key.keyA primeira linha é a URL da chave de criptografia gerada na Etapa 1. Recomendamos hospedar o arquivo em um servidor de origem OSS acelerado pela CDN.
A segunda linha é o caminho absoluto do arquivo de chave local.
-
Use o
FFmpegpara gerar e criptografar arquivos de vídeo HLS.ffmpeg -i input_video.mp4 -c:v copy -c:a copy -hls_time 10 -hls_key_info_file key_info.txt -hls_list_size 0 output_playlist.m3u8-i input_video.mp4: Especifica o arquivo de vídeo a ser convertido, como um vídeo no formatoMP4.-c:v copy: Copia o fluxo de vídeo diretamente sem recodificação.-c:a copy: Copia o fluxo de áudio diretamente sem recodificação.-hls_time 10: Define a duração de cada arquivoTScomo 10 segundos. Modifique esta configuração conforme a duração do vídeo original.-hls_key_info_file key_info.txt: Especifica o arquivo que contém as informações da chave de criptografia.-hls_list_size 0: Define o número de índices de arquivosTSa serem mantidos no arquivoM3U8. Um valor de0indica que todos os índices de arquivos.tsserão mantidos.output_playlist.m3u8: O nome do arquivo de lista de reprodução HLS de saída (ou seja, o nome do arquivoM3U8).
Salve os arquivos
TSeM3U8criptografados em um servidor, como um servidor de origem OSS acelerado pela CDN. Em seguida, use um nome de domínio acelerado pela CDN em um navegador para acessar o arquivoM3U8e habilitar a reprodução criptografada de vídeos que utilizam o protocoloHLS.