FAQ

Respostas às perguntas que surgem com mais frequência durante a operação: a compatibilidade do SRT com software de terceiros e a recepção de multicast em taxas de bits elevadas.

SRT: autorização por login e senha em software de terceiros

Entre dois nós Perfect Streamer, a autorização SRT é configurada de forma nativa, pelos campos da entrada e da saída (SRT). O funcionamento com outros softwares não é garantido: o parâmetro stream ID não é padronizado e cada software o implementa de maneira diferente.

O mecanismo de compatibilidade é comum: o lado receptor toma o stream ID do cliente que se conecta e busca por ele uma conta na lista de logins locais (Usuário: adicionar e alterar). O que deve coincidir é o campo «Usuário» — integralmente com o valor do stream ID. Por exemplo, com a URL

srt://Stream_IP:port?streamid=!#::u=1234567890,password=1234567890

no campo «Usuário» é inserido

!#::u=1234567890,password=1234567890

A sintaxe do stream ID não tem importância para o Perfect Streamer: a cadeia não é decomposta em partes, e sim comparada integralmente. As exceções são três — os caracteres que o próprio nó interpreta:

  • | — separador: a parte da cadeia anterior ao primeiro caractere desse tipo é considerada o login, e o restante, a senha da conta;

  • * — o stream ID não está definido; o cliente é autorizado por endereço, ou seja, por uma conta com o indicador «Conta por endereço IP»;

  • @ no início da cadeia é reservado para a autorização de serviço entre os nós de um domínio Meshwork.

O Perfect Streamer não limita o comprimento do stream ID — a limitação vem da biblioteca SRT e é de 512 bytes, incluindo o zero final. Não convém transmitir valores com mais de cerca de 500 caracteres: uma cadeia longa demais ou interrompe a conexão, ou é enviada vazia, sem nenhuma mensagem de erro.

Cada software forma o stream ID à sua maneira; por isso, se a recepção pela URL não funcionar, habilite na saída SRT a configuração avançada «Trace». No registro do fluxo que aceita a conexão aparecerão o endereço do cliente, o stream ID recebido e o motivo da recusa — essa linha mostra o que a outra parte enviou de fato. Em seguida o stream ID pode ser corrigido: por exemplo, removendo do início da cadeia os caracteres supérfluos que impedem a transmissão do valor.

Recomendações para o trabalho com multicast UDP

Objetivo. Receber de forma estável multicast UDP com uma taxa de bits total de várias centenas de Mbps (1 Gbps ou mais) em um único servidor.

Problema. Na recepção em placas de rede com interface RJ-45, à medida que o tráfego ultrapassa algumas centenas de megabits, começam perdas crescentes de pacotes de multicast. O ajuste fino da placa não ajuda — as versões atuais dos sistemas operacionais já utilizam os valores ótimos. As placas baseadas em chips melhores também não eliminam o problema, sobretudo acima de 500 Mbps. O bonding de duas placas tampouco ajuda: um mesmo grupo multicast chega sempre a um único canal físico e a uma única fila de recepção, de modo que se agrega a banda total, e não a margem de um fluxo individual.

Solução. Pela experiência de operação, para a recepção e a transmissão de multicast UDP devem ser usadas placas de rede de 10 gigabits com interface SFP+. Basta uma placa econômica do nível da Intel X520-DA1/2 (Intel 82599ES) — em nossos testes ela elimina as perdas de pacotes com tráfego de multicast acima de 1 Gbps. Além disso, a carga da CPU diminui de forma perceptível: o processamento das interrupções e das filas de recepção sai mais barato nessas placas.

Leve em conta no diagnóstico: o contador de erros de recepção recv-err nas estatísticas da entrada conta apenas os erros de leitura do socket e a perda de sincronismo no limite do pacote TS. As perdas causadas pelo estouro do buffer de recepção do kernel não chegam à aplicação e não entram nesse contador — elas são vistas com o comando netstat -su (linha RcvbufErrors) e pelos erros de continuidade no analisador de fluxo (Analisador).

Recomendações para a configuração da rede para multicast

A seção se refere às entradas de rede UDP / RTP e Pro-MPEG. Esses parâmetros não afetam a recepção SRT: a biblioteca SRT define ela mesma o tamanho do buffer, e a latência e a margem para retransmissão são configuradas na própria entrada (SRT).

O tamanho do buffer de recepção do socket é definido pela configuração avançada da entrada «Socket buffer (bytes)». Por padrão ela é igual a zero — o nó não solicita nada e o socket recebe o tamanho de buffer definido no sistema pelo parâmetro net.core.rmem_default. Assim que o valor é definido explicitamente, passa a valer o limite superior net.core.rmem_max: o kernel corta silenciosamente a solicitação até esse limite, sem informar o truncamento nem ao registro nem às estatísticas. Por isso o limite superior é elevado antes de definir o tamanho do buffer na entrada.

Os parâmetros são definidos em um arquivo separado em /etc/sysctl.d/:

cat > /etc/sysctl.d/99-pss-net.conf <<EOF
net.core.rmem_default=8388608
net.core.rmem_max=16777216
EOF

Aplicar:

sudo sysctl --system

O valor rmem_max é apenas um limite superior; não se reserva memória por ele. O valor rmem_default aplica-se a todos os sockets UDP do sistema; se esse tamanho global for indesejável, deixe-o inalterado e defina «Socket buffer (bytes)» apenas nas entradas que realmente precisem dele. Como referência para o cálculo, use a taxa de bits do fluxo multiplicada pela pausa admissível no atendimento do socket: 8 MB cobrem cerca de 64 ms a 1 Gbps.

Flussonic e SRT

Exemplo de URL SRT para recepção no software «Flussonic»:

srt://Stream_IP:port?streamid=flussonic

Onde streamid é o login do cliente no software «Flussonic», definido na seção «Configuração — Ajustes de peers».

Ao adicionar um novo cliente, basta indicar apenas o login; na URL de teste está indicado «flussonic». O software «Flussonic», ao trabalhar com SRT, gera o streamID automaticamente e, se na URL de recepção não for indicado o login streamID, o fluxo não será recebido e o Perfect Streamer não conseguirá entregá-lo.

De forma análoga, é possível definir o streamID no formato de login e senha: crie no Perfect Streamer uma conta cujo campo «Usuário» seja igual a !#::u=1234567890,password=1234567890 e informe no «Flussonic» a URL:

srt://Stream_IP:port?streamid=!#::u=1234567890,password=1234567890

É possível indicar o streamID no formato de endereço IP no Perfect Streamer — para isso, na conta é ativado o indicador «Conta por endereço IP» e no campo de endereço é inserido:

  • 192.168.1.1 — um IP único;

  • 192.168.1.1-192.168.1.254 — uma faixa de IP.

Em ambos os casos, a URL para recepção por IP no «Flussonic» terá o seguinte aspecto: srt://Stream_IP:port?streamid=*

O fluxo fica vinculado ao endereço IP do cliente: a recepção por essa URL é possível somente a partir do endereço IP indicado (ou da faixa indicada).