Skip to content

SRT

media.play.srt

Transporte

MPEG-TS sobre SRT/UDP; o cliente conecta em modo caller à porta dedicada do stream.

Codecs compatíveis

Vídeo

  • H.264
  • HEVC
  • AV1
  • JPEG 2000
  • MPEG-2 Video

Áudio

  • AAC
  • MP2
  • MP3
  • AC-3
  • E-AC-3
  • SMPTE 302M

Outras faixas

  • SCTE-35
  • KLV
  • ID3
  • tx3g
  • Teletext
  • DVB subtitles

Esta lista descreve a saída do Sapsan; a decodificação depende do reprodutor. As faixas também precisam de parâmetros de codec válidos para o contêiner selecionado.

Sapsan serve um stream por SRT: cada stream recebe uma porta UDP dedicada à qual se conectam os clientes SRT em modo caller.

AV1 em MPEG-TS usa a convenção stream_type = 0x06 com o descritor de registro AV01; o receptor deve entender essa forma. Isso não garante compatibilidade com todas as implementações de AV1 em TS. Opus não faz parte da lista: reconhecer ou anunciar um codec não basta para oferecer uma saída utilizável, e o caminho atual não fornece o empacotamento TS/PES necessário para Opus.

Configuração

Configure estas opções pelo central na config do streamer.

streams:
  - name: tv1
    inputs:
    - udp: {host: 239.0.0.1, port: 5000}
    srt_play:
      port: 4010
      passphrase: verysecretpass

passphrase ativa a criptografia; sem ela, o stream é servido sem criptografia.

A seção srt_play pode levar uma subseção mpegts — número de programa, PID das pistas e SDT próprios, só para a reprodução desta porta.

Mapa de clientes

Um passphrase comum à porta é uma única fechadura partilhada: a chave tem-na qualquer pessoa a quem a tenha entregado. O mapa de clientes define fechaduras pessoais: cada espectador recebe o seu próprio segredo, e a sessão recebe automaticamente um proprietário — o nome do registo coincidente.

streams:
  - name: tv1
    inputs:
    - udp: {host: 239.0.0.1, port: 5000}
    srt_play:
      port: 4010
      clients:
        ivan:
          passphrase: ivan-personal-secret
        office:
          ips: [198.51.100.0/24]

Um registo do mapa é um nome de cliente com dois campos opcionais:

  • passphrase — o segredo pessoal do registo: se definido, o handshake é criptografado e o espectador deve apresentar exatamente esse; se não definido, o registo aceita handshakes sem criptografia.
  • ips — um filtro de endereços: um endereço ou sub-rede de onde as conexões são aceites. Um conjunto ausente ou vazio não restringe as conexões.

A admissão compõe-se dos campos dos registos: uma conexão criptografada é aceite quando o seu material de chave se abre com o passphrase de um dos registos com palavra-passe cujos endereços incluem o do espectador; uma sem criptografia — por um registo sem palavra-passe com endereço coincidente, ou por um registo aberto (sem palavra-passe e sem endereços) de qualquer endereço. Registos com e sem palavra-passe convivem no mesmo mapa: a criptografia é uma propriedade do handshake, não da porta.

A sessão do espectador leva o proprietário — o nome do registo do mapa coincidente. Numa entrega sem mapa, o proprietário vem da etiqueta user_id_<nome> em labels; as sessões de uma entrega sem etiqueta e sem mapa ficam sem sujeito.

A configuração é validada ao guardar:

  • passphrase idênticos de dois clientes da mesma entrega são rejeitados: o segredo é o que permite à sessão identificar o seu cliente.
  • Conjuntos de ips sobrepostos de dois clientes são rejeitados: um filtro de endereços deve pertencer a um único cliente.

Na consola de gestão o servidor gera o segredo ao adicionar um cliente. Em YAML, um registo aberto é uma forma válida de acesso livre.

O espectador conecta-se com o seu próprio segredo:

ffplay "srt://server:4010?passphrase=ivan-personal-secret"

Observabilidade dos handshakes

Uma entrega com mapa de clientes aceita handshakes da rede, e a sua carga principal é a verificação de segredos. O nó conta os handshakes como séries no scrape do nó (GET /streamer/api-v4/runtime/metrics):

Série O que conta
srt_handshake_attempts_total tentativas que chegaram a uma decisão de admissão
srt_handshake_secret_candidates_total candidatos de segredo testados — o número total de verificações de material de chave
srt_handshake_bad_secret_total rejeições: nenhum candidato coincidiu
srt_handshake_address_filter_rejects_total rejeições do filtro de endereços
# um espectador normal gasta um par de candidatos por tentativa; a força bruta testa o mapa inteiro
rate(srt_handshake_secret_candidates_total[5m])
  / rate(srt_handshake_attempts_total[5m])

Reprodução

ffplay "srt://server:4010?passphrase=verysecretpass"

O que vem a seguir