Skip to content

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

Note

TODO: aceleração por hardware (Nvenc/Vulkan), desentrelaçamento, overlays/logotipos, 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.

Próximos passos