O kernel Linux 2.6.38 já traz suporte para a placa de TV Pixelview PlayTV USB Hybrid no Linux Ubuntu. Com esta placa, é possível se assistir a TV digital brasileira SBTVD em fullseg (1920×1080) e 1seg (320×240), além da TV standard. Também permite gravação de fontes externas analógicas — como receptores de satélite e filmadoras — pelas entradas Composite (conector RCA amarelo), S-Video e RF, em resolução 720×480. Além disto, capta rádio FM.
O Linux reconhece os chips Conexant cx23102 e Fujitsu mb86a20s graças ao trabalho do professor brasileiro Mauro Carvalho Chehab (mchehabΘredhat·com), mantenedor dos módulos multimídia do Linux e um dos 30 maiores colaboradores deste sistema operacional livre. Um trabalho fundamental no momento em que o Brasil deflagra uma ofensiva diplomática-cultural-comercial na difusão do padrão ISDB-TB em países do hemisfério sul.
Hacking TV
O comando lsusb, que lista os dispositivos USB, reporta:
Bus 001 Device 002: ID 1554:5010 Prolink Microsystems Corp.
Vendor ID é 1554 e Product ID é 5010.
O comando “modinfo cx231xx” reporta os parâmetros do módulo Linux cx231xx :
- pcb_debug: enable pcb config debug messages (int)
- mpegbufs: number of mpeg buffers, range 2-32 (int)
- mpeglines: number of lines in an MPEG buffer, range 2-32 (int)
- mpeglinesize: number of bytes in each line of an MPEG buffer, range 512-1024 (int)
- v4l_debug: enable V4L debug messages (int)
- core_debug: enable debug messages [core] (int)
- reg_debug: enable debug messages [URB reg] (int)
- alt: alternate setting to use for video endpoint (int)
- tuner: tuner type (int)
- transfer_mode: transfer mode (1-ISO or 0-BULK) (int)
- disable_ir: disable infrared remote support (int)
- i2c_scan: scan i2c bus at insmod time (int)
- i2c_debug: enable debug messages [i2c] (int)
- isoc_debug: enable debug messages [isoc transfers] (int)
- card: card type (array of int)
- video_nr: video device numbers (array of int)
- vbi_nr: vbi device numbers (array of int)
- radio_nr: radio device numbers (array of int)
- video_debug: enable debug messages (int)
No Ubuntu, estes parâmetros devem ser passados no arquivo /etc/modprobe.d/cx231xx.conf para serem automaticamente configurados no boot. Por exemplo, a ordem dos dispositivos de vídeo, rádio e closed captions pode ser definida com esta linha no arquivo:
options cx231xx video_nr=2 radio_nr=2 vbi_nr=2
Assim, posso ter a webcâmera como dispositivo /dev/video0, a placa de TV PCI como /dev/video1 e a placa de TV USB como /dev/video2
O arquivo de log /var/log/dmesg reporta:
cx231xx #0: cx231xx #0: v4l2 driver version 0.0.1 cx231xx #0: cx231xx_dif_set_standard: setStandard to 100 cx231xx #0: video_mux : 0 cx231xx #0: do_mode_ctrl_overrides : 0x100 cx231xx #0: do_mode_ctrl_overrides NTSC cx231xx #0: cx231xx #0/0: registered device video0 [v4l2] cx231xx #0: cx231xx #0/0: registered device vbi1 cx231xx #0: V4L2 device registered as video0 and vbi1 Registered IR keymap rc-pixelview-002t input: i2c IR (Pixelview PlayTV USB Hy as /devices/virtual/rc/rc1/input6 rc1: i2c IR (Pixelview PlayTV USB Hy as /devices/virtual/rc/rc1 ir-kbd-i2c: i2c IR (Pixelview PlayTV USB Hy detected at i2c-2/2-0030/ir0 [cx231xx #0] cx231xx #0: EndPoint Addr 0x84, Alternate settings: 5 cx231xx #0: Alternate setting 0, max size= 512 cx231xx #0: Alternate setting 1, max size= 184 cx231xx #0: Alternate setting 2, max size= 728 cx231xx #0: Alternate setting 3, max size= 2892 cx231xx #0: Alternate setting 4, max size= 1800 cx231xx #0: EndPoint Addr 0x85, Alternate settings: 2 cx231xx #0: Alternate setting 0, max size= 512 cx231xx #0: Alternate setting 1, max size= 512 cx231xx #0: EndPoint Addr 0x86, Alternate settings: 2 cx231xx #0: Alternate setting 0, max size= 512 cx231xx #0: Alternate setting 1, max size= 576 cx231xx #0: EndPoint Addr 0x81, Alternate settings: 6 cx231xx #0: Alternate setting 0, max size= 512 cx231xx #0: Alternate setting 1, max size= 64 cx231xx #0: Alternate setting 2, max size= 128 cx231xx #0: Alternate setting 3, max size= 316 cx231xx #0: Alternate setting 4, max size= 712 cx231xx #0: Alternate setting 5, max size= 1424 usbcore: registered new interface driver cx231xx cx231xx #0: cx231xxcx231xx: called cx231xx_uninit_vbi_isoc cx231xx #0: cx231xx_stop_stream():: ep_mask = 10 cx231xx #0: setPowerMode::mode = 32, No Change req. cx231xx #0: cx231xx_stop_stream():: ep_mask = 8 cx231xx #0: cx231xx-audio.c: probing for cx231xx non standard usbaudio cx231xx #0: EndPoint Addr 0x83, Alternate settings: 3 cx231xx #0: Alternate setting 0, max size= 512 cx231xx #0: Alternate setting 1, max size= 28 cx231xx #0: Alternate setting 2, max size= 52 cx231xx: Cx231xx Audio Extension initialized dvb_init: looking for demod on i2c bus: 2 mb86a20s: mb86a20s_attach: Detected a Fujitsu mb86a20s frontend tda18271 2-0060: attaching existing instance DVB: registering new adapter (cx231xx #0) DVB: registering adapter 0 frontend 0 (Fujitsu mb86A20s)... Successfully loaded cx231xx-dvb cx231xx: Cx231xx dvb Extension initialized
O módulo cx231xx reconhece o chip cx23102, decodificador de áudio e vídeo USB e receptor de infravermelho. Segundo sua datasheet, ele suporta os seguintes formatos de vídeo: Composite, S-Video, 480i YPrPb, RGB Packed, YCrCb Packed, 10-bit Packed, e YCrCb/YUY2. O receptor infravermelho do chip também foi detectado.
O sintonizador híbrido analógico e digital de TV e FM foi reconhecido como TDA1827HD/C2 .
O comando v4l-info (informações Video For Linux) reportou:
### v4l2 device info [/dev/video2] ### general info VIDIOC_QUERYCAP driver : "cx231xx" card : "Pixelview PlayTV USB Hybrid" bus_info : "usb-0000:00:1a.7-4" version : 0.0.1 capabilities : 0x5030011 [VIDEO_CAPTURE,VBI_CAPTURE,TUNER,AUDIO,READWRITE,STREAMING] standards VIDIOC_ENUMSTD(0) index : 0 id : 0xb000 [NTSC_M,NTSC_M_JP,?] name : "NTSC" frameperiod.numerator : 1001 frameperiod.denominator : 30000 framelines : 525 VIDIOC_ENUMSTD(1) index : 1 id : 0x1000 [NTSC_M] name : "NTSC-M" frameperiod.numerator : 1001 frameperiod.denominator : 30000 framelines : 525 VIDIOC_ENUMSTD(2) index : 2 id : 0x2000 [NTSC_M_JP] name : "NTSC-M-JP" frameperiod.numerator : 1001 frameperiod.denominator : 30000 framelines : 525 VIDIOC_ENUMSTD(3) index : 3 id : 0x8000 [?] name : "NTSC-M-KR" frameperiod.numerator : 1001 frameperiod.denominator : 30000 framelines : 525 VIDIOC_ENUMSTD(4) index : 4 id : 0x4000 [?] name : "NTSC-443" frameperiod.numerator : 1001 frameperiod.denominator : 30000 framelines : 525 VIDIOC_ENUMSTD(5) index : 5 id : 0xff [PAL_B,PAL_B1,PAL_G,PAL_H,PAL_I,PAL_D,PAL_D1,PAL_K] name : "PAL" frameperiod.numerator : 1 frameperiod.denominator : 25 framelines : 625 VIDIOC_ENUMSTD(6) index : 6 id : 0x7 [PAL_B,PAL_B1,PAL_G] name : "PAL-BG" frameperiod.numerator : 1 frameperiod.denominator : 25 framelines : 625 VIDIOC_ENUMSTD(7) index : 7 id : 0x8 [PAL_H] name : "PAL-H" frameperiod.numerator : 1 frameperiod.denominator : 25 framelines : 625 VIDIOC_ENUMSTD(8) index : 8 id : 0x10 [PAL_I] name : "PAL-I" frameperiod.numerator : 1 frameperiod.denominator : 25 framelines : 625 VIDIOC_ENUMSTD(9) index : 9 id : 0xe0 [PAL_D,PAL_D1,PAL_K] name : "PAL-DK" frameperiod.numerator : 1 frameperiod.denominator : 25 framelines : 625 VIDIOC_ENUMSTD(10) index : 10 id : 0x100 [PAL_M] name : "PAL-M" frameperiod.numerator : 1001 frameperiod.denominator : 30000 framelines : 525 VIDIOC_ENUMSTD(11) index : 11 id : 0x200 [PAL_N] name : "PAL-N" frameperiod.numerator : 1 frameperiod.denominator : 25 framelines : 625 VIDIOC_ENUMSTD(12) index : 12 id : 0x400 [PAL_Nc] name : "PAL-Nc" frameperiod.numerator : 1 frameperiod.denominator : 25 framelines : 625 VIDIOC_ENUMSTD(13) index : 13 id : 0x800 [PAL_60] name : "PAL-60" frameperiod.numerator : 1001 frameperiod.denominator : 30000 framelines : 525 VIDIOC_ENUMSTD(14) index : 14 id : 0xff0000 [SECAM_B,SECAM_D,SECAM_G,SECAM_H,SECAM_K,SECAM_K1,SECAM_L,?ATSC_8_VSB] name : "SECAM" frameperiod.numerator : 1 frameperiod.denominator : 25 framelines : 625 VIDIOC_ENUMSTD(15) index : 15 id : 0x10000 [SECAM_B] name : "SECAM-B" frameperiod.numerator : 1 frameperiod.denominator : 25 framelines : 625 VIDIOC_ENUMSTD(16) index : 16 id : 0x40000 [SECAM_G] name : "SECAM-G" frameperiod.numerator : 1 frameperiod.denominator : 25 framelines : 625 VIDIOC_ENUMSTD(17) index : 17 id : 0x80000 [SECAM_H] name : "SECAM-H" frameperiod.numerator : 1 frameperiod.denominator : 25 framelines : 625 VIDIOC_ENUMSTD(18) index : 18 id : 0x320000 [SECAM_D,SECAM_K,SECAM_K1] name : "SECAM-DK" frameperiod.numerator : 1 frameperiod.denominator : 25 framelines : 625 VIDIOC_ENUMSTD(19) index : 19 id : 0x400000 [SECAM_L] name : "SECAM-L" frameperiod.numerator : 1 frameperiod.denominator : 25 framelines : 625 VIDIOC_ENUMSTD(20) index : 20 id : 0x800000 [?ATSC_8_VSB] name : "SECAM-Lc" frameperiod.numerator : 1 frameperiod.denominator : 25 framelines : 625 inputs VIDIOC_ENUMINPUT(0) index : 0 name : "Television" type : TUNER audioset : 0 tuner : 0 std : 0xffffff [PAL_B,PAL_B1,PAL_G,PAL_H,PAL_I,PAL_D,PAL_D1,PAL_K,PAL_M,PAL_N,PAL_Nc,PAL_60,NTSC_M,NTSC_M_JP,?,?,SECAM_B,SECAM_D,SECAM_G,SECAM_H,SECAM_K,SECAM_K1,SECAM_L,?ATSC_8_VSB] status : 0x0 [] VIDIOC_ENUMINPUT(1) index : 1 name : "Composite1" type : CAMERA audioset : 0 tuner : 0 std : 0xffffff [PAL_B,PAL_B1,PAL_G,PAL_H,PAL_I,PAL_D,PAL_D1,PAL_K,PAL_M,PAL_N,PAL_Nc,PAL_60,NTSC_M,NTSC_M_JP,?,?,SECAM_B,SECAM_D,SECAM_G,SECAM_H,SECAM_K,SECAM_K1,SECAM_L,?ATSC_8_VSB] status : 0x0 [] VIDIOC_ENUMINPUT(2) index : 2 name : "S-Video" type : CAMERA audioset : 0 tuner : 0 std : 0xffffff [PAL_B,PAL_B1,PAL_G,PAL_H,PAL_I,PAL_D,PAL_D1,PAL_K,PAL_M,PAL_N,PAL_Nc,PAL_60,NTSC_M,NTSC_M_JP,?,?,SECAM_B,SECAM_D,SECAM_G,SECAM_H,SECAM_K,SECAM_K1,SECAM_L,?ATSC_8_VSB] status : 0x0 [] tuners VIDIOC_G_TUNER(0) index : 0 name : "Tuner" type : ANALOG_TV capability : 0x2 [NORM] rangelow : 0 rangehigh : 4294967295 rxsubchans : 0x0 [] audmode : MONO signal : 65535 afc : 0 video capture VIDIOC_ENUM_FMT(0,VIDEO_CAPTURE) index : 0 type : VIDEO_CAPTURE flags : 0 description : "16bpp YUY2, 4:2:2, packed" pixelformat : 0x56595559 [YUYV] VIDIOC_G_FMT(VIDEO_CAPTURE) type : VIDEO_CAPTURE fmt.pix.width : 640 fmt.pix.height : 480 fmt.pix.pixelformat : 0x56595559 [YUYV] fmt.pix.field : INTERLACED fmt.pix.bytesperline : 1280 fmt.pix.sizeimage : 614400 fmt.pix.colorspace : SMPTE170M fmt.pix.priv : 0 vbi capture VIDIOC_G_FMT(VBI_CAPTURE) type : VBI_CAPTURE fmt.vbi.sampling_rate : 27000000 fmt.vbi.offset : 0 fmt.vbi.samples_per_line: 1440 fmt.vbi.sample_format : 0x59455247 [GREY] fmt.vbi.start[0] : 10 fmt.vbi.start[1] : 273 fmt.vbi.count[0] : 12 fmt.vbi.count[1] : 12 fmt.vbi.flags : 0 controls VIDIOC_QUERYCTRL(BASE+0) id : 9963776 type : INTEGER name : "Brightness" minimum : 0 maximum : 255 step : 1 default_value : 128 flags : 32 VIDIOC_QUERYCTRL(BASE+1) id : 9963777 type : INTEGER name : "Contrast" minimum : 0 maximum : 127 step : 1 default_value : 64 flags : 32 VIDIOC_QUERYCTRL(BASE+2) id : 9963778 type : INTEGER name : "Saturation" minimum : 0 maximum : 127 step : 1 default_value : 64 flags : 32 VIDIOC_QUERYCTRL(BASE+3) id : 9963779 type : INTEGER name : "Hue" minimum : -128 maximum : 127 step : 1 default_value : 0 flags : 32
Os parâmetros de brilho, contraste, matiz, saturação e volume podem ser controlados interativamente pelo programa GUVCViewer. O programa v4l2ucp lê os parâmetros mas mostra-os desabilitados para mudanças.
O programa v4l2ctrl permite gravar e ler estes parâmetros por linha de comando. Pode ser colocado num ícone no painel, para acesso fácil. POr exemplo, a linha abaixo salva num arquivo os parâmetros. Trocar o “-s” por “-l” causa o carregamento dos parâmetros.
v4l2ctrl -d /dev/video2 -s sbtvd.conf
Áudio
Os dispositivos de áudio podem ser listados com o comando “cat /proc/asound/cards”:
meira@P5QL-E:~$ cat /proc/asound/cards 0 [Intel ]: HDA-Intel - HDA Intel HDA Intel at 0xf9ff8000 irq 44 1 [FM801AU ]: FM801 - ForteMedia FM801-AU ForteMedia FM801-AU at 0xe480, irq 17 2 [Cx231xxAudio ]: Cx231xx-Audio - Cx231xx Audio Conexant cx231xx Audio 3 [U0x93a0x2620 ]: USB-Audio - USB Device 0x93a:0x2620 USB Device 0x93a:0x2620 at usb-0000:00:1a.1-1, full speed
E também podemos listar os identificadores de hardware com “cat /proc/asound/pcm”:
meira@P5QL-E:~$ cat /proc/asound/pcm 00-00: ALC1200 Analog : ALC1200 Analog : playback 1 : capture 1 00-02: ALC1200 Analog : ALC1200 Analog : capture 1 00-03: ALC1200 Digital : ALC1200 Digital : playback 1 01-00: FM801 : FM801 : playback 1 : capture 1 02-00: Cx231xx Audio : Conexant cx231xx Capture : capture 1 03-00: USB Audio : USB Audio : capture 1
Com esta informação, sabemos que o dispositivo deve ser identificado como hw:2,0 em programas como mencoder. Neste caso, os parâmetros do mencoder seriam: “-tv device=/dev/video2:adevice=hw.2,0″. Note que o mencoder exige ponto em vez de dois pontos nos nomes de dipositivos ALSA, já que o “:” é usado como separador de parâmetros.
O programa amixer, no entanto, não lista nenhum controle de volume no dispositivo 2 (comando “amixer -c 2”).
O programa alsamixer (comando “alsamixer -c 2”) no terminal revela que o dispositivo não possui nenhum controle.
O programa arecord (comando “arecord -l”) lista todos os dispositivos de captura de áudio:
meira@P5QL-E:~$ arecord -l **** Lista de Dispositivos CAPTURE Hardware **** placa 0: Intel [HDA Intel], dispositivo 0: ALC1200 Analog [ALC1200 Analog] Dispositivo secundário: 1/1 Dispositivo secundário #0: subdevice #0 placa 0: Intel [HDA Intel], dispositivo 2: ALC1200 Analog [ALC1200 Analog] Dispositivo secundário: 1/1 Dispositivo secundário #0: subdevice #0 placa 1: FM801AU [ForteMedia FM801-AU], dispositivo 0: FM801 [FM801] Dispositivo secundário: 1/1 Dispositivo secundário #0: subdevice #0 placa 2: Cx231xxAudio [Cx231xx Audio], dispositivo 0: Cx231xx Audio [Conexant cx231xx Capture] Dispositivo secundário: 1/1 Dispositivo secundário #0: subdevice #0 placa 3: U0x93a0x2620 [USB Device 0x93a:0x2620], dispositivo 0: USB Audio [USB Audio] Dispositivo secundário: 1/1 Dispositivo secundário #0: subdevice #0
Com o programa de visualização de TV TVtime ligado, consegui gravar o áudio da TV analógica com programa Audacity pelo canal cx231xx Audio.
Até agora, não consegui direcionar o áudio para a saída dos altofalantes. Uma gambiarra que descobri pela rede é usar o programa sox para ler uma placa de som e direcionar a saída para outra. O código abaixo é um script para assistir TV com som no tvtime. Este workaround exige um pouco mais de processamento e resulta em uns décimos de segundos de delay — atraso de som.
#!/bin/sh sox -r 48000 -t alsa hw:1,0 -t alsa pulse & mpid=$! smplayer tv:///1 kill $mpid
Já a gravação de áudio e vídeo se deu sem problemas, pela entrada S-Video e áudio RCA, com a linha de comandos:
mencoder \ -noskip \ tv:///2 \ -tv norm=PAL-M\ :device=/dev/video2\ :driver=v4l2\ :outfmt=i420\ :width=720:height=480\ :fps=29.97\ :alsa\ :adevice=hw.2,0\ :amode=1\ :buffersize=200\ :brightness=10:contrast=-25 \ -ffourcc divx \ -oac mp3lame \ -lameopts cbr:preset=128 \ -ovc lavc \ -lavcopts vcodec=mpeg4\ :vbitrate=1400\ :threads=2\ :autoaspect \ -vf dsize=4/3 \ -vf-add scale \ -vf-add kerndeint=10:0:0:1:1 \ -vf-add softskip,harddup \ -endpos 02:10:00 \ -o ~/videos/tv-svideo-sbtvd-mpeg4-mp3-$$.avi
Controle remoto
O driver reconhece automaticamente as funções do controle remoto da PlayTV Hybrid e carrega o módulo do kernel Linux rc_pixelview_002t. Aparentemente, o módulo mapeia as teclas do controle remoto às teclas de um teclado alfanumérico. Uma busca levou ao código deste módulo com as teclas que ele emite:
/* 17 * Keytable for 002-T IR remote provided together with Pixelview 18 * SBTVD Hybrid Remote Controller. Uses NEC extended format. 19 */ 20 static struct rc_map_table pixelview_002t[] = { 21 { 0x866b13, KEY_MUTE }, 22 { 0x866b12, KEY_POWER2 }, /* power */ 23 24 { 0x866b01, KEY_1 }, 25 { 0x866b02, KEY_2 }, 26 { 0x866b03, KEY_3 }, 27 { 0x866b04, KEY_4 }, 28 { 0x866b05, KEY_5 }, 29 { 0x866b06, KEY_6 }, 30 { 0x866b07, KEY_7 }, 31 { 0x866b08, KEY_8 }, 32 { 0x866b09, KEY_9 }, 33 { 0x866b00, KEY_0 }, 34 35 { 0x866b0d, KEY_CHANNELUP }, 36 { 0x866b19, KEY_CHANNELDOWN }, 37 { 0x866b10, KEY_VOLUMEUP }, /* vol + */ 38 { 0x866b0c, KEY_VOLUMEDOWN }, /* vol - */ 39 40 { 0x866b0a, KEY_CAMERA }, /* snapshot */ 41 { 0x866b0b, KEY_ZOOM }, /* zoom */ 42 43 { 0x866b1b, KEY_BACKSPACE }, 44 { 0x866b15, KEY_ENTER }, 45 46 { 0x866b1d, KEY_UP }, 47 { 0x866b1e, KEY_DOWN }, 48 { 0x866b0e, KEY_LEFT }, 49 { 0x866b0f, KEY_RIGHT }, 50 51 { 0x866b18, KEY_RECORD }, 52 { 0x866b1a, KEY_STOP }, 53 };
Já fica mais fácil programar aplicativos para usar o controle remoto. Basta configurá-lo como se recebesse as teclas de um teclado normal.
VLC
Para se ver TV digital brasileira no PC (com Linux ou Windows), a linha de comando do VideoLan é esta:
vlc dvb-t://frequency=593142857 :dvb-adapter=0 :dvb-device=0 :live-caching=300
Onde a frequência varia conforme o canal. A seguinte tabela tem todas as frequências usadas no SBDTV (ISDB-T).
# UHF channels 14 to 69 T 473142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 14 T 479142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 15 T 485142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 16 T 491142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 17 T 497142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 18 T 503142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 19 T 509142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 20 T 515142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 21 T 521142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 22 T 527142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 23 T 533142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 24 T 539142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 25 T 545142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 26 T 551142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 27 T 557142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 28 T 563142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 29 T 569142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 30 T 575142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 31 T 581142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 32 T 587142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 33 T 593142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 34 T 599142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 35 T 605142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 36 # channel 37 not used T 617142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 38 T 623142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 39 T 629142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 40 T 635142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 41 T 641142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 42 T 647142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 43 T 653142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 44 T 659142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 45 T 665142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 46 T 671142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 47 T 677142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 48 T 683142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 49 T 689142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 50 T 695142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 51 T 701142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 52 T 707142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 53 T 713142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 54 T 719142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 55 T 725142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 56 T 731142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 57 T 737142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 58 T 743142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 59 T 749142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 60 T 755142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 61 T 761142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 62 T 767142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 63 T 773142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 64 T 779142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 65 T 785142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 66 T 791142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 67 T 797142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 68 T 803142857 6MHz 3/4 AUTO AUTO AUTO AUTO NONE # channel 69
Com o VLC, para se gravar TV basta apertar no botão vermelho “Gravar”. A gravação de TV digital é fácil e rápida, pois consiste apenas em pegar o fluxo mpeg-TS (Transport Stream) e jogar para um arquivo *.TS. Não ocupa muito processamento e fica com a qualidade máxima com que foi recebida, embora os arquivos fiquem gigantescos. Mas grava tudo: o vídeo em alta resolução, o vídeo em baixa resolução para celulares, os diversos canais de áudio, as legendas, a tabela com a programação da estação de TV.
Windows
O programa para se assistir e gravar TV digital, o “Presto! PVR HD”, grava em formato NXT e revela uma grata surpresa: ele grava tudo o que foi transmitido em cada canal sem impactar o processador. Isto acontece porque o sistema nipo-brasileiro de TV Digital já veicula tudo no formato padronizado MPEG-TS (Transport Stream): vídeo em mpeg4, áudio em AAC, etc. Os programas de gravação só precisam pegar os fluxos e mandar para um arquivo. Assim, o arquivo resultante contém o programa de alta resolução (1980 x 1080 pixels) ou standard resolution (720 x 480 pixels), os programas em 1seg, para celular (320 x 240 ou 320 x 180 pixels), as diversas trilhas sonoras e as legendas.
Também notei que, mesmo que canais HDTV tenham sinais fracos e dificuldades de sintonização, as gravações feitas deste modo ficam quase perfeitas.
A desvantagem é que os arquivos de gravações de TV digital ficam enormes: em média, 230 MB por minuto. Tamanho aproximado de material gravado em formato DV ou mjpeg. Para se editar o arquivo NTX com os editores de vídeos atuais, que não entendem este formato, deve-se convertê-lo para algo mais apropriado, como DV ou mpeg4. Um bom media player para abrir NTX e converter (salvar) em outros formatos é o VLC. Estou experimentando com o container MKV, com áudio e vídeos originais em mpeg4. Há problemas em escolher o fluxo de vídeo. Ele pega sempre o primeiro, na lista de fluxos. Alguns canais de TV mandam a versão 1seg em primeiro, em vez da SDTV ou HDTV, e assim, o VLC não gravará a versão em HD. Deve haver uma opção para escolher o fluxo (programa) correto.
Saiba mais
- Linux e o Sistema Brasileiro de TV Digital. Como configurar o VLC para assistir TV Digital.
- Configuração da placa Pixel View Hybrid semiautomatizada
José Antonio Rocha, eu sintetizei um artigo no vivaolinux com todos os passos necessários para configurar essa placa. Usei o seu script para completar a parte do som. Você dá permissão para que eu use o seu script? Caso não, me avise para que eu dê baixa de alguma forma lá no vol.
Coloquei uma versão pdf aqui, para ver como ficou:
https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0Bwm2iXamEBK6M2IzMmJkZTUtY2RlNy00ZDQxLTg3YWQtZDk3YTJjYjlhYmNm&hl=pt_BR
amigo fiz conforme a sua configuração e no mommento que executo o tvsom.sh me aparece este erro no terminal:
A correr tvtime 1.0.2.
A ler configuração a partir de /etc/tvtime/tvtime.xml
I/O warning : failed to load external entity “/home/laboratorio/.tvtime/tvtime.xml”
I/O error : Permission denied
I/O error : Permission denied
Incapaz de alterar o dono de /home/laboratorio/.tvtime/tvtime.xml: Permissão negada.
ALSA lib pcm.c:2212:(snd_pcm_open_noupdate) Unknown PCM hw2,0
sox FAIL formats: can’t open input `hw2,0′: snd_pcm_open error: No such file or directory
videoinput: Can’t free frame 0: Não há espaço disponível no dispositivo
videoinput: Can’t free frame 1: Não há espaço disponível no dispositivo
videoinput: Can’t free frame 2: Não há espaço disponível no dispositivo
videoinput: Can’t free frame 3: Não há espaço disponível no dispositivo
videoinput: Can’t free frame 0: Não há espaço disponível no dispositivo
videoinput: Can’t free frame 1: Não há espaço disponível no dispositivo
videoinput: Can’t free frame 2: Não há espaço disponível no dispositivo
videoinput: Can’t free frame 3: Não há espaço disponível no dispositivo
mixer: find error: Sucesso
mixer: Can’t open mixer default, mixer volume and mute unavailable.
mixer: Can’t open device default/Line, mixer volume and mute unavailable.
videoinput: Can’t free frame 0: Não há espaço disponível no dispositivo
videoinput: Can’t free frame 1: Não há espaço disponível no dispositivo
videoinput: Can’t free frame 2: Não há espaço disponível no dispositivo
videoinput: Can’t free frame 3: Não há espaço disponível no dispositivo
Olá, Márcio!
Pode ser problema de permissões de acesso a arquivo: “I/O error : Permission denied”
resposta a baixo…
Toda a configuração foi no arquivo /etc/tvtime/tvtime.xml, mas a configuração funciona também no arquivo local.
Em algum momento você alterou o .tvtime/tvtime.xml como root (usando sudo ou su?)? Pois pode ser que as permissões tenham ficado sendo do root.
Se o usuário de sua máquina é laboratorio, você pode pegar de volta esse arquivo para este usuário, com:
sudo chown laboratorio:laboratorio .tvtime/tvtime.xml
Aí tenta abrir de novo.
Observe também se o tvtime mesmo está caindo, pois se sim recomendo reinstalá-lo para recriar os arquivos de configuração.
Outra coisa, aparentemente o sox em seu sistema não está achando o som da Hybrid. Olhe atentamente para a lista de:
cat /proc/asound/cards
e veja qual a linha que tem alguma coisa com cx231xx… O número que começar lá é o que você usará no hw.
Observe que o tutorial é com base no Ubuntu 11.04, em outros sistemas talvez sejam necessários passos a mais.
Faça a correção no script:
sox -r 48000 -t alsa hw:2,0 -t alsa pulse &
Faltou os 2 pontos…
Sinto muito.
Pessoal, estive revendo os passos do meu artigo, e há um problema na parte na criação do script: na linha:
sox -r 48000 -t alsa hw1,0 -t alsa pulse &
Faltou colocar os 2 pontos, que ficará assim:
sox -r 48000 -t alsa hw:1,0 -t alsa pulse &
Fiz uma correção no artigo. A nova versão está em:
https://docs.google.com/viewer?a=v&pid=explorer&chrome=true&srcid=0Bwm2iXamEBK6ZGM3NDVhZGYtYzcyNy00YzZmLWJlZTctZDdlOTExYjc4YjE2&hl=pt_BR
Artigo aceito no VivaoLinux:
http://www.vivaolinux.com.br/artigo/Configurando-a-PixelView-PlayTV-STBVD-Hybrid-no-Ubuntu-11.04/
Correção nos comentários do artigo.
Pessoal,
Consegui fazer a placa funcionar na nova versao do Ubuntu (11.04)…
Basicamente temos que fazer o seguinte:
– Criar um arquivo com a tabela de frequencias do Brasil (http://www.linuxtv.org/wiki/index.php/ISDB-T_Frequency_Table)
– Executar o seguinte comando:
scan arquivo_lista_frequencias > canais.conf
– Após isso é só abrir o arquivo canais.conf no VLC
Graaaande dica, Erick!
Em Frederico Westphalen, RS, ainda não temos TV Digital, eu não tinha testado.
Opa… Ficou legal.. 😀
Eu tenho duas placas: A PixelView SBTVD normal e a Hybrid… A Hybrid fica bem melhor… O sinal fica muito melhor – quase não há perda de frames.. Já a outra tem muita perda de pacotes…
Quanto a essa questão do áudio, alguem conseguiu solucionar?
Mudando um pouco de assunto… Vc sabe se é possível rodar o TV TIME com duas placas dessas ao mesmo tempo? Gostaria de poder assistir mais de um canal ao mesmo tempo (tipo um PIP)…
Vc saberia como capurar a imagem da tv na forma de uma “webcam”? Não quero fazer streaming, mas gostaria de manipular uma imagem e tem muita API que captura webcams.. entao facilitaria um pouco a vida..
A questão do áudio talvez possa ser resolvida recompilando o kernel com o Open Sound System (OSS). Ou esperar que a Canonical implemente um novo substituto para o OSS.
A questão do TV Time é de se testar. Você conseguiu sintonizar TV digital com ele?
Para capturar TV analógica como webcam é só definir qual dispositivo a câmera vai mostrar. É tudo Video for Linux (v4l2), mesmo…
A TV Digital só rodou no VLC (vídeo e áudio 100%).. Não sei se o TV Time tem suporte a DVB (embora o nosso padrão seja ISDB-T, o V4L utiliza as mesmas APIs que servem pro DVB).
Vou comprar mais um tuner Hybrid pra fazer o teste se ele roda com mais de um ao mesmo tempo… Vou dar uma estudada também nas configurações do TV Time..
Quanto à câmera eu até consegui fazer funcionar, mas pra mim ainda não está muito claro como “escolher o canal”… Eu rodei o TV Time e coloquei pra capturar a Globo. Aí mandei capturar a Webcam e deu certo… Mas não sei como interagir ainda diretamente com o V4L, pra eu poder controlar o canal através da minha aplicação..
Sua ideia para duas placas de TV pode funcionar. O comando para o TV Time é algo como “tvtime -d /dev/video1”.
Para sintonizar o canal por linha de comando, a documentação do mencoder diz:
−tv <option1:option2: …> (TV/PVR only)
[…]
channels=<chan>−<name>[=<norm>],<chan>−<name>[=<norm>],…
se há duas placas de captura, é preciso ver a questão do vbio usado por cada uma…. Mesmo usando tvtime -d /dev/video1. Uma solução pode ser:
tvtime -d /dev/video1 -b /dev/vbi1
ou mexer dentro de /etc/tvtime/tvtime.xml e alterar nas seções corretas esses dispositivos.
Mas seu sistema tem só essa placa como dispositivo de vídeo? No meu sistema, um netbook, tem webcam (/dev/video0), o que faz com que a Hybrid fique como /dev/video1. Sendo assim, o comando scan não consegue localizar nenhum canal… Erro de tuning failed, e canais.conf continua vazio…
Não tenho TV digital aqui, mas deve haver um meio de forçar o scan procurar em outro dispositivo.
Eu mudei a configuração do arquivo /etc/tvtime/tvtime.xml, mas a configuração funciona também nesse local.
Em algum momento você alterou o .tvtime/tvtime.xml como root (usando sudo ou su?)? Pois pode ser que as permissões tenham ficado sendo do root.
Se o usuário de sua máquina é laboratorio, você pode pegar de volta esse arquivo para este usuário, com:
sudo chown laboratorio:laboratorio .tvtime/tvtime.xml
Aí tenta abrir de novo.
Observe também se o tvtime mesmo está caindo, pois se sim recomendo reinstalá-lo para recriar os arquivos de configuração.
Outra coisa, aparentemente o sox em seu sistema não está achando o som da Hybrid. Olhe atentamente para a lista de:
cat /proc/asound/cards
e veja qual a linha que tem alguma coisa com cx231xx… O número que começar lá é o que você usará no hw.
Observe que o tutorial é com base no Ubuntu 11.04, em outros sistemas talvez sejam necessários passos a mais.
Pessoal,
Desculpe a minha ignorância, mas não consegui entender direito como interagir com o driver.
No post é passada uma linha de comando para gravação da entrada S-Video (mencoder…), mas não entendi qual parâmetro “informa” ao driver qual é o fluxo que se deseja (TV analógica, digital ou S-Video).
Alguem saberia como eu consigo sintonizar um canal através da linha de comando?
Olá, Erick!
O parâmetro tv:///2 indica entrada S-Video. Mas este método não serve para TV Digital.
Oi. Conseguir usar a tv desse dispositivo com o tvtime, mas no caso do rádio o /dev/radio não aparece. Você consegui ter acesso a este recurso?
Olá, Lindrix!
Não tenho acesso. Acho que /dev/radio é um dispositivo OSS, sem suporte no Ubunttu 10, a não ser que você recompile o kernel com este sistema de som.
Ou seja, cai no mesmo problema… Eitcha. Pelo menos a imagem está aparecendo.
Valeu mesmo pelo tutorial de analise. Só com ele fiz o adaptador funcionar.
Parabéns pelo artigo!
Basicamente consegui ver a tv via mplayer (sem áudio) e gravar via mencoder.
O áudio consegui contornar ligando os cabos na entrada “audio in” de um home theater ao invés.da entrada da pixelview
Ainda não consegui ver a TV digital (SBTVB).
Alguma ajuda?
Valeu!
Obrigado, Ricardo!
O problema do áudio pode ser do Ubuntu, que desistiu de compilar o OSS no kernel desde a versão 10.04 e não colocou nada no lugar. Um workaround (baita gambiarra) é usar o sox num script para ler um canal de áudio e mandar pro pulseaudio:
#!/bin/sh
sox -r 48000 -t alsa hw:1,0 -t alsa pulse &
mpid=$!
smplayer tv:///1
kill $mpid
Não tenho canal digital aqui para testar TV Digital, mas tente instalar o totem-plugin-dvb-deamon, que instalará também as dvb-apps, com configurador de chip de TV digital, scan de canais e agendador de gravações. Talvez dê pra assistir TV no Totem.
Muito obrigado! O “workaround” funcionou perfeitamente! Quanto à TV digital instalei o totem-plugin-dvb-deamon, mas o mesmo não encontrou nenhum canal. No windows funciona direitinho, mas o processo de gravação do Linux via mencoder é muito melhor, pois já salvamos em formato avi enquanto que o programa que acompanha a placa salva num formato não muito amigável (TS).
Até mais!
Obrigado pelo script. Aqui no Ubuntu 11.04 só funcionou com o som também por causa dele, onde só mudei o nome do player de tv, no caso coloquei para tvtime. O sox tive de instalar também com apt-get install sox. Se desse para fazer um patch para o tv time… Fica para quando aprender c ou c++… rsssss
Legal que funcionou. É bem gambiarra, pois consome recursos de processamento e dá um atraso de alguns décimos de segundo no áudio. Mas funciona.
O peso é esse, esse modo gambiarra, pois fica difícil de saber se vai rodar sem problemas se o script for chamando por um atalho do gnome, o que vou tentar daqui a pouco. Vou tentar também instalar o kernel-rt, para ver se essas paradas no som diminuem…
Agora uma solução mais completa será uma recompilagem do kernel para ativar o oss… O nó é fazer isso com um Atom N270…. vigi.
O procedimento com o vlc falhou comigo antes desse do script, provavelmente por causa do /dev/video0 está para a webcam… O scan do dvb-apps (dvb-tools para ubuntu/debian) não acha nenhum canal assim…
O curioso é como o tvtime é excelente para mostrar a imagem e é tão defasado… Parece que o projeto parou em 2005… Não tem uma rotina de detecção dos dispositivos, sendo preciso arrumar manualmente. Ainda é baseado em oss, que várias distros não usam… se bem que o pulse audio é bem pesado em comparação com o alsa puramente.
Em outros tv players (xawtv e zapping) o som não rola diretamente e o vídeo é muito ruim…
Novidade: o controle remoto funciona…. Sem problema nenhum.
Pelo menos nos canais e no volume…
Outro utilitário que permite fazer isso é o alsaloop, que permite até ajustar a latência:
alsaloop -C hw:1,0 -P hw:0,0 -t 50000
Aqui, no caso, ajustei a latência para 50ms.
Entretanto, o melhor seria que o próprio tvtime fizesse isso. Eu fiz um patch para o tvtime do Ubuntu detectar o áudio dessa placa sozinho. Agradeceria se quem tivesse este mesmo problema entrasse em https://bugs.launchpad.net/ubuntu/+source/tvtime/+bug/963036 e clicasse no link “This bug affects you”.
Massa! Já tinha ouvido do suporte ao alsa pelo tvtime, mas não dessa rotina de detecção. O pacote do tvtime 1.0.2-6 tem ela disponível?
Sim, cliquei lá no launchpad, e está marcado como confirmado. Gostaria também que o suporte a tv digital ficasse mais fácil. Pelo jeito com o vlc ainda é bem trabalhoso…
Não está disponível ainda não, submeti o bug hoje. Vamos ver se eles aprovam logo o patch para entrar na próxima versão do pacote.
O que facilitaria bastante o suporte a TV digital seria se na interface do próprio VLC tivesse uma forma de escanear os canais, mas aí teria que discutir com o pessoal do VLC como eles acham que isso ficaria melhor na interface. Não sei se já tem alguém trabalhando nisso.
Entendi.
Acredito que o pessoal do vlc não se oporia a inclusão dessa função, desde que alguém faça pra eles incluirem e disponibilizarem.
A questão do suporte de placas de tv, e inclusive as de tv digital, é um problema que me parece ser causado provavelmente do pouco uso desses hardwares na maioria dos países que trabalham com linux. As distros assim deixam de incluirem rotinas de autodetecção e configuração desses dispositivos.
Acho isso pois fico sem acreditar que a equipe original de um programa como o TVtime deixaram de desenvolvê-lo.
Mas é gratificante saber que há pessoas como você para dá um gás nesse programa.
Eu mesmo tentei entender o código para modificar alguma coisa lá, mas não consegui…
Quem mantém a parte de TV e Rádio do Linux é o brasileiro Mauro Chehab. Alguém teria contato com ele?
O contato dele:
mchehab@redhat.com
Mas na vez que tentei entrar em contato com ele sobre uma placa de tv anterior, não tive resposta.
Mas no boom da tv digital, ele apareceu no brlinux e anunciou o suporte para muitas placas de tv:
http://br-linux.org/2010/tv-digital-brasileira-no-linux-mais-drivers-experimentais-disponiveis/
A questão pelo que entendi, a hybrid é aceita sem problemas pelo kernel. No caso Chehab só poderia dá alguma dica para melhorar alguma coisa ou citar aplicações de tv, acho, mas as distros e desenvolvedores de aplicações é que precisam modernizar o suporte aos módulos corretos de tv.
Exemplo: o ubuntu usa o pulse para o áudio, mas o alsa é quem mostra o dispositivo de som da tv. Como o tvtime disponível nos repositórios atuais só conversa com oss, a tv fica muda.
Espero que o pessoal libere o tvtime com o fix de Paulo Matias.