requisitos:
dvb-appsffmpeg
opcionais:
vlc
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.
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.confO 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.confPara 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:
statusinforma 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.
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 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. 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"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'"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.
- https://wiki.archlinux.org/index.php/DVB-T
- https://www.linuxtv.org/pipermail/linux-dvb/2008-August/028394.html
- https://wiki.gentoo.org/wiki/TV_Tuner#Recording_using_zap_and_cat.7Cdd_.28preferred_method.29
- http://www.tannet.org.uk/using-ffmpeg-to-generate-a-transport-stream-more-details-and-how-to-add-text-overlays/
- http://panteltje.com/panteltje/dvd/
- http://www.waveguide.se/?article=creating-dvb-t-compatible-mpeg2-streams-using-ffmpeg
- https://www.linuxtv.org/wiki/index.php/Testing_your_DVB_device
- https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu
- http://linux-dvb.linuxtv.narkive.com/dvrxCE9Q/nova-t-stick-problem