MBR¶
media.transcode.mbr
O transcodificador do Sapsan altera codecs, bitrate e resolução e prepara uma escada multibitrate (MBR). Várias qualidades de saída podem usar a mesma trilha de vídeo de origem: ela é decodificada uma única vez, e os quadros resultantes são enviados aos codificadores das qualidades de saída.
Cada saída é descrita por uma regra: qual trilha de origem selecionar e o que obter dela. A seleção pode se basear no idioma ou no tipo de conteúdo para que a configuração continue funcionando quando a composição da entrada mudar. Isso é importante ao alternar entre as fontes principal e reserva, cujos identificadores de trilha e codecs podem ser diferentes.
Como o Sapsan constrói uma escada sincronizada¶
A transcodificação multibitrate cria várias representações do mesmo vídeo. Elas diferem no tamanho do quadro e no bitrate e podem usar codecs diferentes, mas devem mostrar a mesma imagem no mesmo instante. O Sapsan as processa em um único pipeline de vídeo com uma escala de tempo comum.
Uma única decodificação para todas as qualidades¶
Cada trilha de vídeo de origem tem um único decodificador para todas as suas qualidades de saída. O quadro comprimido de entrada é decodificado uma única vez; a imagem resultante é enviada para o redimensionamento e a codificação de cada qualidade. Por exemplo, para três qualidades de saída, o Sapsan realiza uma decodificação da entrada e três codificações de saída.
À medida que o número de qualidades aumenta, aumenta o trabalho dos codificadores de saída e das transformações de imagem. O custo de decodificar a fonte não é multiplicado pelo número de qualidades. Isso é especialmente importante para vídeos de entrada que exigem muitos recursos: o decodificador compartilhado atende a toda a escada.
Timestamps idênticos para os quadros correspondentes¶
Uma mesma imagem de origem recebe um timestamp de apresentação PTS comum em todas as suas qualidades de saída. Os próprios timestamps coincidem, não apenas a taxa nominal de quadros. O reprodutor pode relacionar as imagens correspondentes de qualidades diferentes pelo mesmo tempo de mídia.
Por exemplo, a 25 quadros/s, os tempos de apresentação em segundos são os seguintes:
| Imagem | 1080p H.264 | 720p HEVC | 360p AV1 |
|---|---|---|---|
| Primeira | 2.000 | 2.000 | 2.000 |
| Seguinte | 2.040 | 2.040 | 2.040 |
| Mais uma | 2.080 | 2.080 | 2.080 |
Para as qualidades de uma mesma trilha de origem, o servidor usa a precisão da escala de tempo da fonte: os PTS originais não são arredondados para um número inteiro de quadro apenas para realizar a codificação. As diferentes velocidades de processamento dos codificadores também não criam relógios independentes para as qualidades.
O DTS estabelece a ordem de decodificação e depende da reordenação de quadros de cada codificador. Ao usar quadros B, o DTS pode diferir do PTS e entre codecs. Para relacionar a mesma imagem entre qualidades, é usado o PTS comum.
Quadros-chave sincronizados¶
Com configurações de GOP coordenadas, os quadros-chave das diferentes qualidades coincidem nos mesmos instantes de apresentação. O reprodutor recebe pontos de alternância sincronizados: ao selecionar outra qualidade, continua da mesma posição temporal. O segmentador pode estabelecer os limites dos segmentos nos quadros-chave coincidentes.
Para uma escada sincronizada, defina os mesmos valores de gop_size e gop_structure nas suas saídas de vídeo. Por exemplo, a 25 quadros/s e com gop_size: 50, o intervalo previsto entre quadros-chave é de dois segundos para todas as qualidades. No exemplo abaixo, ambas as qualidades usam a mesma trilha de origem e a mesma estrutura de GOP.
Combinação das trilhas em um stream de saída comum¶
Os codificadores podem precisar de tempos diferentes para preparar um quadro, especialmente ao usar codecs diferentes ou quadros B. O Sapsan combina os resultados dos codificadores de vídeo e as trilhas de áudio segundo uma escala de tempo de mídia comum: o intercalador de saída armazena os quadros em um buffer e os ordena por DTS. Portanto, o tempo de conclusão de cada codificação não determina a ordem dos quadros de todo o stream.
O decodificador compartilhado, os PTS coincidentes e os quadros-chave sincronizados fornecem ao reprodutor uma escada preparada para reprodução adaptativa. Ele pode selecionar o bitrate adequado preservando a posição temporal do vídeo. A sincronização original de áudio e vídeo também é importante: ordenar os quadros de saída não corrige, por si só, um deslocamento incorreto do áudio no sinal de entrada.
Configuração¶
A configuração é feita pela API do central. Os exemplos usam a forma de objeto do YAML; por exemplo, source: {content: audio} é transmitido em JSON como "source": {"content": "audio"}. A notação YAML com tag também é aceita: source: !content audio.
Considere um stream que recebe as seguintes variantes de sinal:
| Entrada | Vídeo | Áudio |
|---|---|---|
| Principal, MPEG-TS por UDP | v1, HEVC, 1920×1080 |
a1: MPEG Audio em inglês, eng; a2: AC-3 em russo, rus |
| Reserva, HLS | v3, H.264, 1280×720 |
a4: AAC em russo, rus |
As regras abaixo selecionam o vídeo e o áudio em russo pelas suas propriedades. A entrada reserva não exige uma configuração separada do transcodificador:
streams:
- name: tv1
inputs:
- udp: {host: 239.0.0.1, port: 5000}
- hls: {url: https://backup.example.com/tv1/index.m3u8}
transcoder:
output:
- source: {best_quality: video}
codec: {set: h264}
bitrate: 2800000
params:
video:
gop_size: 50
gop_structure: ibbbp
resize: {fit: {width: 1920, height: 1080}}
- source: {best_quality: video}
codec: {set: h264}
bitrate: 1200000
params:
video:
gop_size: 50
gop_structure: ibbbp
resize: {fit: {width: 1280, height: 720}}
- source: {language: rus}
codec: {set: aac}
bitrate: 128000
O vídeo de qualquer uma dessas entradas gera duas qualidades H.264, e a trilha de áudio em russo selecionada é preparada para entrega em AAC. A trilha em inglês da entrada principal não corresponde à regra de áudio. A alternância entre entradas é realizada pelo LSI; as regras source selecionam as trilhas da entrada já ativa.
Seleção da trilha de origem¶
source |
Como as trilhas são selecionadas em um stream ao vivo |
|---|---|
{exact: v1} ou {exact: a2} |
Uma trilha com o ID de entrada indicado. É o ID lógico do Sapsan, não o PID do MPEG-TS. |
{content: video} ou {content: audio} |
Todas as trilhas do tipo indicado. Uma regra pode criar várias saídas. |
{best_quality: video} ou {best_quality: audio} |
Uma trilha do tipo indicado com o maior bandwidth declarado. |
{language: rus} |
Todas as trilhas de áudio cujo idioma seja exatamente rus, independentemente do codec e do ID. |
{language_codec: [rus, aac]} |
Todas as trilhas de áudio que tenham simultaneamente o idioma rus e o codec aac. |
{codecs: [pcma, pcmu]} |
Todas as trilhas cujo codec pertença ao conjunto não vazio indicado. |
O idioma é obtido dos metadados da fonte. A comparação é exata: rus e ru são strings diferentes. Sem uma etiqueta de idioma, a regra por idioma não encontra correspondência. Se a entrada tiver várias trilhas em russo, language: rus selecionará cada uma; para restringir a seleção, combine o idioma com o codec ou use um ID específico.
best_quality compara o bitrate declarado, não a resolução nem a qualidade visual. A ausência de bandwidth equivale a zero; em caso de empate, é selecionada a última trilha correspondente na descrição atual da entrada. A seleção ocorre na configuração do transcodificador. Atualizar apenas a estimativa de bitrate não provoca a alternância automática entre trilhas.
Cada regra é executada de forma independente. Várias regras com a mesma fonte criam várias qualidades de saída. As regras language: rus e content: audio processarão ambas a trilha em russo; essa configuração não significa «russo e, se não houver, qualquer áudio».
O que muda ao alternar entre entradas¶
Quando a composição ou algum parâmetro significativo da entrada muda, o Sapsan compara novamente as regras com a nova descrição das trilhas e reconfigura o processamento. São consideradas alterações nos IDs e na ordem das trilhas, nos codecs e nos parâmetros de decodificação. Para áudio, o idioma também é considerado.
No exemplo acima, a regra language: rus seleciona a2 na entrada principal e a4 na reserva. A regra exact: a2 não seleciona nada na reserva. Já a regra language_codec: [rus, ac3] limita intencionalmente o processamento ao AC-3 em russo e não corresponde ao AAC da reserva.
Os identificadores das trilhas de saída podem mudar quando a entrada muda. Em particular, uma trilha AAC-LC que já atenda aos requisitos pode passar sem nova codificação e preservar seu ID de entrada; essa otimização ocorre depois da seleção da fonte. A reconfiguração dos decodificadores e codificadores também pode produzir uma transição na saída. As regras de seleção permitem trabalhar com fontes de estruturas diferentes, mas não garantem, por si só, uma alternância sem interrupções.
Transcodificar todas as trilhas de áudio¶
Para um canal de televisão multilíngue, é possível preservar todos os idiomas disponíveis e converter o áudio para AAC:
transcoder:
output:
- source: {best_quality: video}
codec: {set: h264}
bitrate: 2000000
- source: {content: audio}
codec: {set: aac}
bitrate: 128000
Se a entrada principal contiver duas trilhas de áudio, a regra de áudio processará ambas. Se a reserva tiver apenas uma, a saída terá uma. A regra usa o conjunto disponível de trilhas de áudio de origem; ela não estabelece um número fixo de saídas.
A seleção por idioma usa os metadados da entrada. No processamento ao vivo atual, a etiqueta de idioma não é transferida para o áudio recodificado; na passagem direta, ela é preservada. Considere essa limitação ao verificar os nomes dos idiomas no reprodutor.
Transcodificar apenas determinados codecs¶
Para fontes cujo áudio pode chegar em PCMA, PCMU ou AAC, é possível configurar separadamente a conversão de G.711 e a passagem direta de AAC:
transcoder:
output:
- source: {best_quality: video}
codec: {set: h264}
bitrate: 2000000
- source: {codecs: [pcma, pcmu]}
codec: {set: aac}
bitrate: 128000
- source: {codecs: [aac]}
codec: same
A regra com o conjunto de codecs seleciona tanto PCMA quanto PCMU sem depender do identificador da trilha de áudio. A outra regra preserva o AAC existente sem transcodificação. Se G.711 e AAC estiverem presentes ao mesmo tempo, ambas as regras serão executadas. Codecs fora desses conjuntos, como AC-3, não são selecionados pelas regras de áudio deste exemplo.
Quando não há uma trilha correspondente¶
No transcodificador ao vivo, uma regra sem correspondências não cria uma trilha de saída. Por exemplo, a ausência de rus não provoca a seleção de áudio em inglês nem a geração de silêncio. As outras regras que encontram correspondências continuam gerando suas saídas.
O campo if_missing existe no modelo de configuração, mas o processamento ao vivo não executa seus modos fail, blank e substitute. Não se pode depender deles para substituir uma trilha ausente ao alternar entre fontes.
Os exemplos acima incluem codificação real. Se todas as regras usarem apenas codec: same, será ativado o modo geral de passagem direta; essa configuração não pode ser usada para filtrar trilhas por source.
Codecs e parâmetros¶
codec: {set: h264}: transcodifica para o codec indicado. Os parâmetros são detalhados em codificação de vídeo. A notaçãocodec: samepreserva os quadros originais sem transcodificação.- Escada sincronizada: as saídas com codecs diferentes a partir de uma mesma trilha de vídeo mantêm timestamps e quadros-chave alinhados.
gop_sizeegop_structure: controlam o comprimento e a estrutura do GOP para obter segmentos MBR sincronizados.- Áudio G.711: a transcodificação para AAC ou Opus com preservação da escala de tempo também é descrita em codificação de áudio.
- Trilhas auxiliares: trilhas de legendas e prévias JPEG compatíveis podem ser preservadas por passagem direta. Verifique a composição final do stream, além das regras de codificação.
Redimensionamento¶
resize |
Função |
|---|---|
{scale: {width: 1280, height: 720}} |
Redimensiona exatamente para o tamanho indicado. |
{fit: {width: 1280, height: 720}} |
Ajusta a imagem preservando as proporções e adiciona faixas se necessário. |
{crop: {width: 1280, height: 720}} |
Recorta a imagem para o tamanho indicado. |
Verificação¶
Verifique os metadados de entrada e a composição final das trilhas nas estatísticas do stream. Depois, abra a playlist mestre http://server/streaming/v/tv1/index.m3u8 e confira as qualidades de saída e os idiomas do áudio.
Alterne o stream para a reserva e verifique-a separadamente: qual vídeo foi selecionado, quantas trilhas de áudio foram geradas e se os idiomas necessários foram preservados. Para diagnosticar a reconfiguração, consulte as mensagens encode backend selected input tracks e a tabela de correspondência entre trilhas de entrada e saída encode backend stream mapping nos logs do streamer.