O que é o Common Media Application Format (CMAF)?

Common Media Application Format (CMAF) é um padrão MPEG, ISO/IEC 23000-19, para codificar e empacotar mídia segmentada como MP4 fragmentado. Ele especifica a estrutura das faixas, a criptografia e os perfis de mídia para que HLS e DASH possam fazer referência aos mesmos objetos de mídia.

Como o Common Media Application Format (CMAF) funciona

CMAF define objetos de mídia, não um manifesto ou protocolo de entrega; a apresentação fica a cargo de um modelo abstrato de aplicação implementado tanto por HLS quanto por DASH. Uma faixa CMAF contém um tipo de mídia (vídeo, áudio ou legendas) e consiste em um cabeçalho CMAF, que inicializa um decodificador, seguido de fragmentos. Codificações alternativas do mesmo conteúdo entre as quais um reprodutor pode alternar nos limites dos fragmentos formam um conjunto de alternância. Conjuntos de alternância do mesmo tipo de mídia, por exemplo, de diferentes idiomas ou codecs, formam um conjunto de seleção, e uma apresentação combina conjuntos de seleção sincronizados. Para entrega, os fragmentos são agrupados em segmentos ou divididos em blocos. Uma playlist de mídia HLS lista os segmentos de uma faixa e aponta para seu cabeçalho com EXT-X-MAP, e um MPD DASH pode endereçar os mesmos arquivos.

Informações essenciais

  1. Cada faixa CMAF transporta um tipo de mídia, portanto áudio e vídeo são empacotados e solicitados separadamente. As orientações da Apple para HLS dizem que segmentos CMAF, em geral, não podem conter vários tipos de mídia, que deve haver uma playlist de mídia por faixa CMAF e que cada segmento precisa de uma tag EXT-X-MAP apontando para o cabeçalho CMAF da faixa. Portanto, segmentos de fluxo de transporte multiplexados precisam ser reempacotados, não renomeados, e um reprodutor precisa do cabeçalho correspondente antes de poder decodificar qualquer segmento.
  2. Um segmento contém um ou mais fragmentos inteiros; um bloco é um subconjunto consecutivo das amostras de um fragmento. Os fragmentos são decodificáveis de forma independente, e os reprodutores alternam entre representações nos limites dos fragmentos. Os blocos existem para reduzir a latência: eles podem ser publicados antes que o fragmento esteja completo, mas o DASH-IF observa que não são gerados para alternância de taxa de bits nem para acesso aleatório. A cadeia de entrega e o reprodutor também precisam cooperar: as orientações de baixa latência do DASH-IF exigem codificação de transferência HTTP em blocos desde a ingestão do empacotador até a borda da CDN e estabelecem requisitos separados para clientes de baixa latência. HLS disponibiliza blocos como segmentos parciais listados na playlist e define seu modo de baixa latência como o uso combinado de segmentos parciais, recarga bloqueante de playlist e indicações de pré-carregamento.
  3. CMAF não oferece uma única cópia criptografada que atenda a todos os dispositivos. Ele define perfis de apresentação para conteúdo sem criptografia, criptografia cbcs e criptografia cenc, e a Apple afirma que HLS oferece suporte apenas a conteúdo sem criptografia e a cbcs. A Microsoft documenta o suporte a cbcs no PlayReady a partir da versão 4.0 do cliente, como recurso opcional, com clientes anteriores limitados a cenc. Portanto, uma cópia com cbcs exclui dispositivos PlayReady anteriores à versão 4.0, e uma cópia com cenc exclui os reprodutores HLS da Apple. Verifique as versões dos clientes DRM no conjunto de dispositivos atendidos antes de planejar uma entrega criptografada com uma única cópia.
  4. CMAF sobre HLS precisa de reprodutores que aceitem MP4 fragmentado. A Apple informa que o suporte a segmentos fMP4 na especificação HLS começou em setembro de 2016, afirma que clientes baseados em revisões anteriores provavelmente não conseguirão lidar com conteúdo CMAF e cita iOS 10, macOS 10.12 e tvOS 10 como as primeiras versões da Apple com essa capacidade esperada. Quanto às versões do protocolo, o rascunho HLS exige versão de compatibilidade 6 ou superior para EXT-X-MAP em uma playlist de mídia que não seja composta apenas por quadros I, enquanto a documentação do multiplexador HLS do FFmpeg informa que segmentos fMP4 podem ser usados na versão 7 do HLS e superiores e descreve segmentos de fluxo de transporte como compatíveis com todas as versões do HLS. A lista da Apple cobre apenas suas próprias plataformas, portanto teste a reprodução de fMP4 em outros dispositivos que você precisa continuar atendendo; clientes HLS que não conseguem reproduzi-lo ainda precisam de uma representação em fluxo de transporte junto à representação CMAF.

Quando o Common Media Application Format (CMAF) é importante

Use CMAF quando o mesmo conteúdo precisar chegar a reprodutores HLS e DASH e você quiser um conjunto de segmentos no armazenamento e no cache da CDN em vez de dois. Isso só compensa quando há compatibilidade em comum entre os reprodutores de destino: cada cliente precisa reproduzir MP4 fragmentado, decodificar os codecs escolhidos e, para conteúdo protegido, oferecer suporte ao mesmo esquema de criptografia. CMAF não fornece manifestos, então você ainda publica uma playlist HLS e um MPD DASH que apontam para os segmentos compartilhados.

Como a Transloadit ajuda com o Common Media Application Format (CMAF)

O Robot /video/adaptive da Transloadit tem um parâmetro technique com um valor cmaf, documentado como uma saída CMAF baseada em FFmpeg com manifestos MPEG-DASH e HLS que fazem referência aos mesmos segmentos fMP4. Com essa técnica, playlist_name nomeia o manifesto DASH e hls_playlist_name nomeia a playlist mestre HLS. O Robot normalmente é usado após /video/encode, que produz as representações.

Com cmaf, a documentação informa que todo o áudio fica em um único conjunto de adaptação rotulado com o primeiro idioma de áudio, e entradas com mais de um idioma de áudio conhecido geram um aviso na Assembly; para áudio em vários idiomas, ela recomenda technique: "hls" com audio_group: true. A página do Robot não descreve opções de criptografia de conteúdo nem de blocos de baixa latência.

Explore os formatos de arquivo e os recursos de compressão da Transloadit

Fontes

Transforme conhecimento sobre mídia em um pipeline funcional

Conecte uploads, processamento, IA, armazenamento e entrega por meio de uma única API declarativa, com o stack de codificação, o ajuste de escala e as constantes mudanças de formatos gerenciados para você.

Experimente a Transloadit gratuitamente