Skip to content

fabianonunes/ddff

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

16 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ddff

Dependências

requisitos:

  • dvb-apps
  • ffmpeg

opcionais:

  • vlc

Tabela de frequências

A tabela de frequências descreve os canais da faixa UHF no Brasil. É documentada pela NBR 15608-1 (tabela 5) e está disponível nesse repositório no arquivo freq.conf.

Tabela de estações (channels.conf)

A tabela de estações é uma lista com a descrição dos canais sintonizáveis de uma região. Está disponível nesse repositório sob o nome de channels.conf (sintonizado em Brasília em dez-2016).

Se for preciso atualizá-la, utilize o scan:

scan freq.conf > nova_tabela_de_estacoes.conf

Assistindo pelo VLC

O VLC aceita como entrada uma tabela de estações. É uma boa ferramenta para testar visualmente a sintonia dos canais. Basta passar o arquivo da tabela como argumento:

vlc channels.conf

Do DVB para o ffmpeg

- sintonizando o receptor

Para gerar um stream dvb compatível com o ffmpeg, primeiro é preciso adquirir um LOCK (sintonizar o receptor).

Vamos considerar que na tabela de estações exista o canal 'TV SENADO 1' com a seguinte descrição:

TV SENADO  1:689142857:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_AUTO:FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:HIERARCHY_NONE:769:513:16544

Para sintonizá-lo, utilize o tzap :

# o nome do canal é insensível ao caso
$ tzap 'tv senado  1' -r -c channels.conf
status 1f | signal 9341 | snr 00a9 | ber 00000000 | unc 00000000 | FE_HAS_LOCK
status 1f | signal 92e6 | snr 00b1 | ber 00000000 | unc 00000000 | FE_HAS_LOCK
status 1f | signal 92fb | snr 00bc | ber 00000000 | unc 00000000 | FE_HAS_LOCK
status 1f | signal 9324 | snr 009f | ber 00000000 | unc 00000000 | FE_HAS_LOCK
status 1f | signal 9337 | snr 00ba | ber 00000000 | unc 00000000 | FE_HAS_LOCK
# (...)

O receptor continuará sintonizado na frequência desejada até que o comando tzap seja interrompido.

A saída do comando tzap indica a saúde do sinal de TV:

  • status informa se ocorrem satisfatoriamente a recepção e a decodificação de um stream de vídeo. O único valor aceitável é 1f (veja a tabela bitmap para intepretar outros resultados).
  • snr (sound/noise ratio) informa a força do sinal em hexadecimal. Sua escala depende do dispositivo, variando de 4 a 8 bits (2 a 4 dígitos). Não é necessário que o valor seja alto para uma boa transmissão, desde que se mantenha estável. Utilize essa coluna como feedback quando for posicionar a antena.
  • unc (uncorrected block errors) reporta a qualidade do sinal. Qualquer valor diferente de 0 significa que haverá chuvisco digital na recepção.

Em algumas versões do tzap, o parâmetro -r é obrigatório para a liberação do dispositivo /dev/dvb/adapter0/dvr0 para gravação.

- passando a saída do receptor para o ffmpeg

Uma vez que o lock foi adquirido (FE_HAS_LOCK) com uma recepção satisfatória (status == 1f), o dispositivo /dev/dvb/adapter0/dvr0 emitirá um stream no formato mpegts.

Para consumir via ffmpeg, passe o dispositivo como entrada (-i):

ffmpeg -i /dev/dvb/adapter0/dvr0 saida.mp4 # salva o stream no arquivo saida.mp4 

- read errors

O ffmpeg não aceita streams com read errors, portanto qualquer erro de transmissão (como chuviscos e queda de qualidade do sinal) pode travar seu processamento.

Para passar um stream limpo para o ffmpeg, passe-o antes pelo dd conv=noerror:

dd if=/dev/dvb/adapter0/dvr0 conv=noerror | ffmpeg -i - saida.mp4
# note que o stdin, -, foi utilizado como arquivo de entrada do ffmpeg. 

Transmitindo para um RTMP

Para transmitir para um RTMP, passe a respectiva url como ponto de saída do ffmpeg.

Exemplo:

dd if=/dev/dvb/adapter0/dvr0 conv=noerror | ffmpeg -i - rtmp://a.rtmp.youtube.com/live2/CHAVE_DO_STREAM

É recomendável reencodar o stream de TV em um formato mais adequado para a plataforma de destino (Facebook, Youtube)

O script ddff.sh desse repositório apresenta um ajuste ideal para a transmissão em SD para o Facebook. A chave de acesso deve ser passada como primeiro argumento:

./ddff.sh "CHAVE_DO_STREAM"

Múltiplos streams

Para enviar o mesmo stream para múltiplos processos simultaneamente, utilize o pee do pacote moreutils.

dd if=/dev/dvb/adapter0/dvr0 conv=noerror | ./transcode.sh | pee "./ff.sh 'chave1'" "./ff.sh 'chave2'"

Proxy

O ffmpeg não vai mandar nada por um proxy HTTP. Você vai precisar de algum proxifier para direcionar todo o fluxo http por um proxy.

No Linux, você pode usar o proxychains:

proxychains ./ddff.sh "CHAVE_DO_STREAM"

Configure o proxychains pelo arquivo /etc/proxychains.conf. Se sua rede proíbe o acesso a DNS externos, comente o parâmetro proxy_dns.

Por onde andei...

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages