Transcodificação¶
O transcodificador do Sapsan (baseado em FFmpeg) recodifica o stream de entrada: muda codecs, taxa de bits e resolução, e prepara uma escada de qualidades multibitrate (MBR) a partir de uma única fonte.
Configuração¶
A seção transcoder.output descreve as trilhas de saída. Cada trilha toma uma fonte (!content video ou !content audio) e define um codec:
streams:
- name: tv1
inputs:
- udp: {host: 239.0.0.1, port: 5000}
transcoder:
output:
- source: !content video # 1080p — o topo da escada
codec: !set h264
bitrate: 2800000
params: !video
gop_size: 28
gop_structure: ibbbp
- source: !content video # 720p
codec: !set h264
bitrate: 1200000
params: !video
gop_size: 28
gop_structure: ibbbp
resize: !fit
height: 720
- source: !content audio
codec: !set aac
Seleção da trilha de origem¶
source |
O que toma |
|---|---|
!content video / !content audio |
uma trilha por tipo de conteúdo |
!exact v1 |
uma trilha específica por identificador |
!best_quality video |
a melhor qualidade disponível |
!language_codec [eng, aac] |
uma trilha por idioma e codec |
O parâmetro if_missing define o comportamento quando a trilha não existe: drop (padrão — a saída não é criada), blank (sinal vazio) ou substitute.
Codecs e parâmetros¶
codec: !set <name>— recodificar (h264, hevc, av1, aac, opus);codec: same— passar sem recodificar (por exemplo, apenas reempacotar o áudio).- Saídas de codecs diferentes a partir de uma mesma fonte mantêm alinhados os timestamps e os quadros-chave — uma escada h264/hevc/av1 permanece consistente.
gop_size,gop_structure(ip,ibp,ibbp,ibbbp,ibbbbp) — controle da estrutura do GOP, importante para segmentos MBR alinhados.- Áudio: recodificação G.711 → AAC/Opus 48 kHz com preservação da linha do tempo — o caso típico de câmera IP.
- As trilhas JPEG de capturas atravessam o transcodificador intactas.
Redimensionamento¶
resize |
O que faz |
|---|---|
!scale |
escala exata para as dimensões indicadas |
!fit |
encaixar preservando a proporção de aspecto (com preenchimento, cor de fundo configurável) |
!crop |
recortar para as dimensões indicadas |
Sobreposição do logotipo¶
O transcodificador sobrepõe uma imagem de logotipo ao vídeo — o logotipo do canal no canto do quadro ou uma marca d'água. O logotipo fica «gravado» na trilha de vídeo: aparece em qualquer dispositivo e vai para o arquivo. A seção logo vive nos parâmetros de vídeo do degrau e é aplicada ao quadro pronto de cada degrau separadamente — depois do escalonamento e das bordas do fit —, então o tamanho em pixels da imagem não depende da resolução de saída.
streams:
- name: tv1
inputs:
- udp: {host: 239.0.0.1, port: 5000}
transcoder:
output:
- source: !content video # 1080p — o topo da escada
codec: !set h264
bitrate: 2800000
params: !video
logo:
image: /storage/logo.png
position: top_right
x: 24
y: 16
height: 72
- source: !content video # 720p
codec: !set h264
bitrate: 1200000
params: !video
resize: !fit
height: 720
logo:
image: /storage/logo.png
position: top_right
x: 16
y: 10
height: 48
| Campo | O que define |
|---|---|
image |
o endereço da imagem: um caminho no nó, uma URL http(s) ou uma referência a um registro da biblioteca de logotipos logo@<sha256> |
position |
o ponto de ancoragem no quadro — um dos cinco, obrigatório |
x, y |
deslocamentos em pixels a partir da ancoragem, 0 por padrão |
width, height |
o tamanho da imagem em pixels do quadro do degrau |
As ancoragens são top_left, top_right, bottom_left, bottom_right e center. Os deslocamentos são contados da ancoragem para dentro: nos cantos, do canto correspondente; em center, um deslocamento a partir do centro.
O tamanho é dado em pixels do quadro do degrau. Com os dois campos — a imagem é ajustada a eles; com um — o outro é derivado da proporção da imagem, sem distorção; com nenhum — a imagem é usada no tamanho nativo. Para o logotipo ocupar a mesma fração do quadro em toda a escada, os tamanhos dos degraus são calculados pela altura: no exemplo acima, 72 px em 1080p e 48 px em 720p são a mesma fração do quadro. Os degraus sem a seção logo ficam como estavam.
Requisitos da imagem:
- Formato — PNG ou JPEG pela assinatura dos bytes. Um PNG com canal alfa mantém a transparência: os pixels transparentes não tocam o quadro e os semitransparentes se misturam com ele.
- Limites — no máximo 1 MB de bytes e 4096 pixels por lado.
- A URL é baixada ao configurar o degrau, com timeout de 10 segundos.
- A mesma imagem em vários degraus é carregada e decodificada uma única vez.
Restrições:
- O logotipo é sobreposto apenas numa saída com codificação: um degrau com
codec: samee os codecs de transmissão brutos (j2k,v210,uyvy422) não o suportam — essa seção é rejeitada na gravação. widtheheightsão inteiros positivos não maiores que 4096; o zero e o que passa do limite são rejeitados na gravação, indicando o campo.- A imagem é lida ao montar o degrau, não em cada quadro: mudar o endereço, a ancoragem ou os deslocamentos é uma edição comum da configuração — o degrau é remontado e o stream continua.
Um logotipo quebrado é um erro do degrau
Se a imagem não puder ser carregada ou decodificada — não há arquivo, a URL não responde, o limite é excedido, os bytes não se leem —, o degrau não é montado: no estado da saída e no log aparece um erro com nome, enquanto os demais degraus e o próprio stream continuam funcionando. O transcodificador nunca servirá o stream sem o logotipo em silêncio. A recuperação é editar o endereço da imagem: a nova configuração remonta o degrau sem reiniciar o processo.
A referência logo@<sha256> aponta para um registro da biblioteca de logotipos do central: o nó baixa a imagem ao aplicar o corte de configuração e entrega ao transcodificador um arquivo pronto. Num nó isolado (sem central) essa referência dá um erro de degrau com nome — ali funcionam o caminho no nó e a URL http(s). No console do Catena o logotipo da escada é definido com o cartão Logotipo da escada (Transcodificação e MBR).
Note
TODO: aceleração por hardware (Nvenc/Vulkan), desentrelaçamento, referência de parâmetros de áudio.
Verificação¶
Abra a playlist mestra http://server/streaming/v/tv1/index.m3u8 — nela devem aparecer todas as qualidades de saída.