Televisión Digital Terrestre en GNU/Linux Pablo Santamaría pablo@fcaglp.unlp.edu.ar pablosantamaria@gmail.com Universidad Nacional de La Plata / CONICET 8 Jornadas de Software Libre 2010 P. Santamaría, UNLP/CONICET TDT en GNU/Linux 1/27
Mangrullo y Sifón. P. Santamaría, UNLP/CONICET TDT en GNU/Linux 2/27
Transmisión en La Plata. Antena transmisora. P. Santamaría, UNLP/CONICET TDT en GNU/Linux 3/27
Transmisión en La Plata. Antena transmisora. P. Santamaría, UNLP/CONICET TDT en GNU/Linux 3/27
Transmisión en La Plata. Canales en emisión. P. Santamaría, UNLP/CONICET TDT en GNU/Linux 4/27
Equipamiento. Computadora con GNU/Linux. P. Santamaría, UNLP/CONICET TDT en GNU/Linux 5/27
Equipamiento Dongle USB. PixelView PlayTV USB SBTVD FullSeg P. Santamaría, UNLP/CONICET TDT en GNU/Linux 6/27
Equipamiento Antenas de recepción. P. Santamaría, UNLP/CONICET TDT en GNU/Linux 7/27
Conectando el dongle. Soporte del hardware Soporte provisto por: kernel: subsistema DVB (Digital Video Broadcast) espacio de usuario: dvb-apps http://linuxtv.org Se requiere el firmware dvb-usb-dib0700.1.120.fw Descargarlo de http://linuxtv.org/downloads/firmware # cp dvb-usb-dib0700.1.120.fw /lib/firmware P. Santamaría, UNLP/CONICET TDT en GNU/Linux 8/27
Conectando el dongle. Soporte del hardware Soporte provisto por: kernel: subsistema DVB (Digital Video Broadcast) espacio de usuario: dvb-apps http://linuxtv.org Se requiere el firmware dvb-usb-dib0700.1.120.fw Descargarlo de http://linuxtv.org/downloads/firmware # cp dvb-usb-dib0700.1.120.fw /lib/firmware P. Santamaría, UNLP/CONICET TDT en GNU/Linux 8/27
Conectando el dongle. El sistema USB Identificación (vendor/product ID) $ /sbin/lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 005: ID 1554:5010 Prolink Microsystems Corp. Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub P. Santamaría, UNLP/CONICET TDT en GNU/Linux 9/27
Conectando el dongle. El sistema USB Identificación (vendor/product ID) $ /sbin/lsusb Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 001 Device 005: ID 1554:5010 Prolink Microsystems Corp. Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub Bus 003 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub Bus 004 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub P. Santamaría, UNLP/CONICET TDT en GNU/Linux 9/27
Conectando el dongle. El kernel Mensajes del kernel $ dmesg tail usb 1-1: new high speed USB device using ehci_hcd and address 5 usb 1-1: New USB device found, idvendor=1554, idproduct=5010 usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 usb 1-1: Product: STK807X usb 1-1: Manufacturer: DiBcom usb 1-1: SerialNumber: 016 dvb-usb: found a Prolink Pixelview SBTVD in cold state, will try to load a firmware usb 1-1: firmware: requesting dvb-usb-dib0700-1.20.fw dvb-usb: downloading firmware from file dvb-usb-dib0700-1.20.fw dib0700: firmware started successfully. dvb-usb: found a Prolink Pixelview SBTVD in warm state. dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer. DVB: registering new adapter (Prolink Pixelview SBTVD) DVB: registering adapter 0 frontend 0 (DiBcom 8000 ISDB-T) DiB0070: successfully identified input: IR-receiver inside an USB DVB receiver as /devices/pci0000:00/0000:00:02.1/usb1/1-1/input/input9 dvb-usb: schedule remote query interval to 50 msecs. dvb-usb: Prolink Pixelview SBTVD successfully initialized and connected. P. Santamaría, UNLP/CONICET TDT en GNU/Linux 10/27
Conectando el dongle. El kernel Mensajes del kernel $ dmesg tail usb 1-1: new high speed USB device using ehci_hcd and address 5 usb 1-1: New USB device found, idvendor=1554, idproduct=5010 usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3 usb 1-1: Product: STK807X usb 1-1: Manufacturer: DiBcom usb 1-1: SerialNumber: 016 dvb-usb: found a Prolink Pixelview SBTVD in cold state, will try to load a firmware usb 1-1: firmware: requesting dvb-usb-dib0700-1.20.fw dvb-usb: downloading firmware from file dvb-usb-dib0700-1.20.fw dib0700: firmware started successfully. dvb-usb: found a Prolink Pixelview SBTVD in warm state. dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer. DVB: registering new adapter (Prolink Pixelview SBTVD) DVB: registering adapter 0 frontend 0 (DiBcom 8000 ISDB-T) DiB0070: successfully identified input: IR-receiver inside an USB DVB receiver as /devices/pci0000:00/0000:00:02.1/usb1/1-1/input/input9 dvb-usb: schedule remote query interval to 50 msecs. dvb-usb: Prolink Pixelview SBTVD successfully initialized and connected. P. Santamaría, UNLP/CONICET TDT en GNU/Linux 10/27
Conectando el dongle. Módulos Driver: dibcom0700 $ lsmod Module Size Used by dvb_usb_dib0700 74739 0 dib7000p 16582 1 dvb_usb_dib0700 dib0090 12661 1 dvb_usb_dib0700 dib7000m 14232 1 dvb_usb_dib0700 dib0070 7528 2 dvb_usb_dib0700 dvb_usb 14740 1 dvb_usb_dib0700 dib8000 25312 2 dvb_usb_dib0700 dvb_core 91431 3 dib7000p,dvb_usb,dib8000 dib3000mc 11404 1 dvb_usb_dib0700 dibx000_common 2798 4 dib7000p,dib7000m,dib8000,dib3000mc P. Santamaría, UNLP/CONICET TDT en GNU/Linux 11/27
Conectando el dongle. Módulos Driver: dibcom0700 $ lsmod Module Size Used by dvb_usb_dib0700 74739 0 dib7000p 16582 1 dvb_usb_dib0700 dib0090 12661 1 dvb_usb_dib0700 dib7000m 14232 1 dvb_usb_dib0700 dib0070 7528 2 dvb_usb_dib0700 dvb_usb 14740 1 dvb_usb_dib0700 dib8000 25312 2 dvb_usb_dib0700 dvb_core 91431 3 dib7000p,dvb_usb,dib8000 dib3000mc 11404 1 dvb_usb_dib0700 dibx000_common 2798 4 dib7000p,dib7000m,dib8000,dib3000mc P. Santamaría, UNLP/CONICET TDT en GNU/Linux 11/27
Conectando el dongle. Dispositivo Archivos de dispositivo $ ls -l /dev/dvb/adapter0 crw-rw 1 root video 212, 4 2010-10-19 12:42 /dev/dvb/adapter0/demux0 crw-rw 1 root video 212, 5 2010-10-19 12:42 /dev/dvb/adapter0/dvr0 crw-rw 1 root video 212, 3 2010-10-19 12:42 /dev/dvb/adapter0/frontend0 crw-rw 1 root video 212, 7 2010-10-19 12:42 /dev/dvb/adapter0/net0 frontend: controla el sintonizador y el demodulador. demux: controla la descomposición del TS. La decodificación de contenidos es por software con posibilidad de aceleración por hardware en la GPU. P. Santamaría, UNLP/CONICET TDT en GNU/Linux 12/27
Conectando el dongle. Dispositivo Archivos de dispositivo $ ls -l /dev/dvb/adapter0 crw-rw 1 root video 212, 4 2010-10-19 12:42 /dev/dvb/adapter0/demux0 crw-rw 1 root video 212, 5 2010-10-19 12:42 /dev/dvb/adapter0/dvr0 crw-rw 1 root video 212, 3 2010-10-19 12:42 /dev/dvb/adapter0/frontend0 crw-rw 1 root video 212, 7 2010-10-19 12:42 /dev/dvb/adapter0/net0 frontend: controla el sintonizador y el demodulador. demux: controla la descomposición del TS. La decodificación de contenidos es por software con posibilidad de aceleración por hardware en la GPU. P. Santamaría, UNLP/CONICET TDT en GNU/Linux 12/27
Conectando el dongle. Dispositivo Archivos de dispositivo $ ls -l /dev/dvb/adapter0 crw-rw 1 root video 212, 4 2010-10-19 12:42 /dev/dvb/adapter0/demux0 crw-rw 1 root video 212, 5 2010-10-19 12:42 /dev/dvb/adapter0/dvr0 crw-rw 1 root video 212, 3 2010-10-19 12:42 /dev/dvb/adapter0/frontend0 crw-rw 1 root video 212, 7 2010-10-19 12:42 /dev/dvb/adapter0/net0 frontend: controla el sintonizador y el demodulador. demux: controla la descomposición del TS. La decodificación de contenidos es por software con posibilidad de aceleración por hardware en la GPU. P. Santamaría, UNLP/CONICET TDT en GNU/Linux 12/27
Conectando el dongle. Anatomía del dongle P. Santamaría, UNLP/CONICET TDT en GNU/Linux 13/27
Escaneando. Tabla de frecuencias Obtener el archivo de frecuencias freq.txt Tabla de frecuencias UHF para la norma ISDB-Tb disponible en http://www.linuxtv.org/wiki/index.php/isdb-t_ Frequency_Table/. $ cat freq.txt T 521142857 6MHz AUTO AUTO AUTO AUTO AUTO NONE # channel 22 T 527142857 6MHz AUTO AUTO AUTO AUTO AUTO NONE # channel 23 T 533142857 6MHz AUTO AUTO AUTO AUTO AUTO NONE # channel 24 T 539142857 6MHz AUTO AUTO AUTO AUTO AUTO NONE # channel 25 Canales UHF 14 (473Mhz) a 69 (803Mhz) (37 no usado) P. Santamaría, UNLP/CONICET TDT en GNU/Linux 14/27
Escaneando. Tabla de frecuencias Obtener el archivo de frecuencias freq.txt Tabla de frecuencias UHF para la norma ISDB-Tb disponible en http://www.linuxtv.org/wiki/index.php/isdb-t_ Frequency_Table/. $ cat freq.txt T 521142857 6MHz AUTO AUTO AUTO AUTO AUTO NONE # channel 22 T 527142857 6MHz AUTO AUTO AUTO AUTO AUTO NONE # channel 23 T 533142857 6MHz AUTO AUTO AUTO AUTO AUTO NONE # channel 24 T 539142857 6MHz AUTO AUTO AUTO AUTO AUTO NONE # channel 25 Canales UHF 14 (473Mhz) a 69 (803Mhz) (37 no usado) P. Santamaría, UNLP/CONICET TDT en GNU/Linux 14/27
Escaneando. Tabla de frecuencias Obtener el archivo de frecuencias freq.txt Tabla de frecuencias UHF para la norma ISDB-Tb disponible en http://www.linuxtv.org/wiki/index.php/isdb-t_ Frequency_Table/. $ cat freq.txt T 521142857 6MHz AUTO AUTO AUTO AUTO AUTO NONE # channel 22 T 527142857 6MHz AUTO AUTO AUTO AUTO AUTO NONE # channel 23 T 533142857 6MHz AUTO AUTO AUTO AUTO AUTO NONE # channel 24 T 539142857 6MHz AUTO AUTO AUTO AUTO AUTO NONE # channel 25 Canales UHF 14 (473Mhz) a 69 (803Mhz) (37 no usado) P. Santamaría, UNLP/CONICET TDT en GNU/Linux 14/27
Escaneando. Tabla de frecuencias Obtener el archivo de frecuencias freq.txt Tabla de frecuencias UHF para la norma ISDB-Tb disponible en http://www.linuxtv.org/wiki/index.php/isdb-t_ Frequency_Table/. $ cat freq.txt T 521142857 6MHz AUTO AUTO AUTO AUTO AUTO NONE # channel 22 T 527142857 6MHz AUTO AUTO AUTO AUTO AUTO NONE # channel 23 T 533142857 6MHz AUTO AUTO AUTO AUTO AUTO NONE # channel 24 T 539142857 6MHz AUTO AUTO AUTO AUTO AUTO NONE # channel 25 Canales UHF 14 (473Mhz) a 69 (803Mhz) (37 no usado) P. Santamaría, UNLP/CONICET TDT en GNU/Linux 14/27
Escaneando. Buscando canales Generar el archivo channels.conf $ scan freq.txt > channels.conf >>> tune to: 527142857:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_AUTO: Network Name RTA C23 0x0000 0xe758: pmt_pid 0x1fc8 (null) TV Publica (???) 0x0000 0xe741: pmt_pid 0x0102 (null) TV Publica HD (???) 0x0000 0xe742: pmt_pid 0x0103 (null) Encuentro (???) $ cat channels.conf Encuentro:527142857:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_AUTO:\ FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:\ HIERARCHY_NONE:305:306:59202 P. Santamaría, UNLP/CONICET TDT en GNU/Linux 15/27
Escaneando. Buscando canales Generar el archivo channels.conf $ scan freq.txt > channels.conf >>> tune to: 527142857:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_AUTO: Network Name RTA C23 0x0000 0xe758: pmt_pid 0x1fc8 (null) TV Publica (???) 0x0000 0xe741: pmt_pid 0x0102 (null) TV Publica HD (???) 0x0000 0xe742: pmt_pid 0x0103 (null) Encuentro (???) $ cat channels.conf Encuentro:527142857:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_AUTO:\ FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:\ HIERARCHY_NONE:305:306:59202 P. Santamaría, UNLP/CONICET TDT en GNU/Linux 15/27
Escaneando. Buscando canales Generar el archivo channels.conf $ scan freq.txt > channels.conf >>> tune to: 527142857:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_AUTO: Network Name RTA C23 0x0000 0xe758: pmt_pid 0x1fc8 (null) TV Publica (???) 0x0000 0xe741: pmt_pid 0x0102 (null) TV Publica HD (???) 0x0000 0xe742: pmt_pid 0x0103 (null) Encuentro (???) $ cat channels.conf Encuentro:527142857:INVERSION_AUTO:BANDWIDTH_6_MHZ:FEC_AUTO:\ FEC_AUTO:QAM_AUTO:TRANSMISSION_MODE_AUTO:GUARD_INTERVAL_AUTO:\ HIERARCHY_NONE:305:306:59202 P. Santamaría, UNLP/CONICET TDT en GNU/Linux 15/27
Testeando la calidad de la recepción Utilizando femon Sintonizar una frecuencia y programa con tzap. $ tzap -c channels.conf Encuentro using /dev/dvb/adapter0/frontend0 and /dev/dvb/adapter0/demux0 reading channels from file channels.conf tuning to 527142857 Hz video pid 0x0131, audio pid 0x0132 status 03 signal 9e22 snr 00c6 ber 00000000 unc 00000000 status 1f signal 9e20 snr 00cf ber 00000000 unc 00000000 FE_HAS_LOCK status 1f signal 9df9 snr 00db ber 00000000 unc 00000000 FE_HAS_LOCK Ejecutar simultáneamente el monitor del frontend: femon $ femon -H FE: DiBcom 8000 ISDB-T (DVBT) status SCVYL signal 61 % snr 0 % ber 0 unc 0 FE_HAS_LOCK status SCVYL signal 61 % snr 0 % ber 0 unc 0 FE_HAS_LOCK P. Santamaría, UNLP/CONICET TDT en GNU/Linux 16/27
Testeando la calidad de la recepción Utilizando femon Sintonizar una frecuencia y programa con tzap. $ tzap -c channels.conf Encuentro using /dev/dvb/adapter0/frontend0 and /dev/dvb/adapter0/demux0 reading channels from file channels.conf tuning to 527142857 Hz video pid 0x0131, audio pid 0x0132 status 03 signal 9e22 snr 00c6 ber 00000000 unc 00000000 status 1f signal 9e20 snr 00cf ber 00000000 unc 00000000 FE_HAS_LOCK status 1f signal 9df9 snr 00db ber 00000000 unc 00000000 FE_HAS_LOCK Ejecutar simultáneamente el monitor del frontend: femon $ femon -H FE: DiBcom 8000 ISDB-T (DVBT) status SCVYL signal 61 % snr 0 % ber 0 unc 0 FE_HAS_LOCK status SCVYL signal 61 % snr 0 % ber 0 unc 0 FE_HAS_LOCK P. Santamaría, UNLP/CONICET TDT en GNU/Linux 16/27
Testeando la calidad de la recepción Parámetros explicados status SCVYL signal 61 % snr 0 % ber 0 unc 0 FE_HAS_LOCK Estado del dispositivo S: señal detectada. C: señal digital detectada. V: detección y corrección de errores estable. Y: bits de sincronización encontrados. L: señal adquirida. FE_HAS_LOCK: señal adquirida, todo OK! P. Santamaría, UNLP/CONICET TDT en GNU/Linux 17/27
Testeando la calidad de la recepción Parámetros explicados status SCVYL signal 61 % snr 0 % ber 0 unc 0 FE_HAS_LOCK Potencia de la señal Signal: potencia de la señal. SNR: relación señal a ruido. Nota: Valores puramente numéricos sin unidades reales. Utilizar para comparar con el mismo equipo o con marca/modelo similar. P. Santamaría, UNLP/CONICET TDT en GNU/Linux 18/27
Testeando la calidad de la recepción Parámetros explicados status SCVYL signal 61 % snr 0 % ber 0 unc 0 FE_HAS_LOCK Potencia de la señal Signal: potencia de la señal. SNR: relación señal a ruido. Nota: Valores puramente numéricos sin unidades reales. Utilizar para comparar con el mismo equipo o con marca/modelo similar. P. Santamaría, UNLP/CONICET TDT en GNU/Linux 18/27
Testeando la calidad de la recepción Parámetros explicados status SCVYL signal 61 % snr 0 % ber 0 unc 0 FE_HAS_LOCK Calidad de la señal digital BER: tasa de bits con error. UNC: bloques incorregibles. Nota: Si sus valores son fluctuantes y altos no se verá nada aún si la potencia es alta. P. Santamaría, UNLP/CONICET TDT en GNU/Linux 19/27
Testeando la calidad de la recepción Parámetros explicados status SCVYL signal 61 % snr 0 % ber 0 unc 0 FE_HAS_LOCK Calidad de la señal digital BER: tasa de bits con error. UNC: bloques incorregibles. Nota: Si sus valores son fluctuantes y altos no se verá nada aún si la potencia es alta. P. Santamaría, UNLP/CONICET TDT en GNU/Linux 19/27
Televisión digital con VLC VLC media player Reproductor multimedia GLP. Apto para dispositivos ISDB-Tb. Codecs de los proyectos ffmpeg, x264, faad2/faac. http://www.videolan.org/vlc/ P. Santamaría, UNLP/CONICET TDT en GNU/Linux 20/27
Televisión digital con VLC Leyendo la lista de canales $ vlc channels.conf & La lista de canales aparece como una lista de reproducción. P. Santamaría, UNLP/CONICET TDT en GNU/Linux 21/27
Televisión digital con VLC Navegación en la lista de reproducción Navegando por la lista Atajos de teclado: f: Pantalla completa Ctrl+l: Ocultar/mostrar lista n: Siguiente en la lista p: Previo en la lista P. Santamaría, UNLP/CONICET TDT en GNU/Linux 22/27
Televisión digital con VLC Desentrelazado Desentrelazando la imagen: $ vlc --vout-filter=deinterlace --filter-deinterlace-mode blend \ channels.conf & Atajo de teclado: Modos: d: Activa/desactiva desentrelazado. blend, mean, bob, linear, X, yadif. Tools > Preferences P. Santamaría, UNLP/CONICET TDT en GNU/Linux 23/27
Televisión digital con VLC Razón de aspecto Cambio de la razón de aspecto X:Y Atajo de teclado: a: Cambia la razón de aspecto a 1:1, 4:3, 16:9, 16:10,... P. Santamaría, UNLP/CONICET TDT en GNU/Linux 24/27
Televisión digital con VLC Razón de aspecto Cambio de la razón de aspecto X:Y Atajo de teclado: a: Cambia la razón de aspecto a 1:1, 4:3, 16:9, 16:10,... P. Santamaría, UNLP/CONICET TDT en GNU/Linux 24/27
Televisión digital con VLC Controles avanzados Capturas y grabación: View > Advanced Controls Atajos de teclado: Shift+r: Grabación Shift+s: Captura de pantalla P. Santamaría, UNLP/CONICET TDT en GNU/Linux 25/27
Televisión digital con VLC Aceleración por hardware de la decodificación Decodificación H264 en la GPU (Unidad de Procesamiento Gráfico) $ vlc --fmpeg-hw channels.conf & Requiere: drivers: intel, nvidia/ati (propietarios). VAAPI (Video Acceleration API): libdva + back-ends. Tools > Preferences P. Santamaría, UNLP/CONICET TDT en GNU/Linux 26/27
P. Santamaría, UNLP/CONICET TDT en GNU/Linux 27/27