Hauppauge WinTV-HVR-950Q
Overal Impression
This is my first video capture device and I really like it. It currently works great/excellent for ATSC (digital broadcast) but, at the time of writting, it doesn't work at all for NTSC (analog TV/cable). There is a patch[1] already available that fixes this problem, but I haven't tried it. I use WinTV-HVR-950Q on very modest hardware: an old Dell Latitude D600 laptop with 2GHz/500MB connected to a 1080p LCD TV through a VGA cable. Both my TV and the WinTV are connected to an internal amplified antenna (TERK HDTVa). This WinTV tuner is as good as my TV tuner: both found the same channels and have about the same video quality (even for 1080i broadcasts).
Note that it's critical to have a fast video card. My card, ATI Radeon 9000 32Mb, is not supported by ATI anymore, so I had to use the open source radeon driver instead of ATI's fglrx. If you use the default settings for the radeon driver, you will get a pitiful 170FPS in glxgears, which is NOT sufficient for watching digital TV. But after I used this xorg.conf file[2], I got about 1100FPS, which was sufficient. Of course, I had to do the following to get the best resolution on my TV (and a blank screen on my laptop):
xrandr --output LVDS --off --output VGA-0 --mode 1920x1080
Basic Installation
The xc5000 driver needed for this WinTV-HVR-950Q is already part of the latest Linux kernel (part of v4l-dvb drivers). You should upgrade to Linux kernel 2.6.27. First you need to download and install the xc5000 firmware:
wget http://www.steventoth.net/linux/xc5000/HVR-12x0-14x0-17x0_1_25_25271_WHQL.zip wget http://www.steventoth.net/linux/xc5000/extract.sh sh extract.sh cp dvb-fe-xc5000-1.1.fw /lib/firmware modprobe xc5000
The firmware will be added lazily (on-demand) when you first use the driver. After you plug-in the device on a USB 2.0 port (it won't work with a USB 1.1) and use the driver for the first time (eg, by scanning channels), you may see something like this on dmesg:
usb 1-3: new high speed USB device using ehci_hcd and address 3 usb 1-3: configuration #1 chosen from 1 choice au0828: i2c bus registered tveeprom 0-0050: Hauppauge model 72001, rev B3F0, serial# 5280879 tveeprom 0-0050: MAC address is 00-0D-FE-XX-XX-XX tveeprom 0-0050: tuner model is Xceive XC5000 (idx 150, type 4) tveeprom 0-0050: TV standards NTSC(M) ATSC/DVB Digital (eeprom 0x88) tveeprom 0-0050: audio processor is AU8522 (idx 44) tveeprom 0-0050: decoder processor is AU8522 (idx 42) tveeprom 0-0050: has no radio, has IR receiver, has no IR transmitter hauppauge_eeprom: hauppauge eeprom: model=72001 xc5000 0-0061: creating new instance xc5000: Successfully identified at address 0x61 xc5000: Firmware has not been loaded previously DVB: registering new adapter (au0828) DVB: registering adapter 0 frontend 0 (Auvitek AU8522 QAM/8VSB Frontend)... Registered device AU0828 [Hauppauge HVR950Q] usb 1-3: New USB device found, idVendor=2040, idProduct=7200 usb 1-3: New USB device strings: Mfr=1, Product=2, SerialNumber=10 usb 1-3: Product: WinTV HVR-950 usb 1-3: Manufacturer: Hauppauge usb 1-3: SerialNumber: 000000000 xc5000: waiting for firmware upload (dvb-fe-xc5000-1.1.fw)... firmware: requesting dvb-fe-xc5000-1.1.fw xc5000: firmware read 12332 bytes. xc5000: firmware upload
Connect the WinTV to a good antenna. Then download some tools (using your distribution installer: yum, apt-get, etc):
yum install dvb-apps mplayer
Then scan your ATSC channels. For example, to scan ATSC channels in US do
scandvb /usr/share/dvb-apps/atsc/us-ATSC-center-frequencies-8VSB > channels.conf
Then copy the file channels.conf to the directory .mplayer/ and test it on of one of the channels listed in channels.conf. For example, if you have a channel called KERA-HD, you do:
mplayer dvb://'KERA-HD'
In my case, for a 1080i broadcast, I had to use the following parameters:
mplayer dvb://'KERA-HD' -vo x11 -framedrop 1
because of my slow video and audio cards.
TV Recording
Instead of using special software for TIVO-like recording (such as MythTV), I use simple scripts. I first created a file in my bin directory, called favorites.txt, with mnemonics for my favorite channels listed in channels.conf (these are actual their channel numbers). Example:
4 KDFW DT 5 KXAS-HD 11 KTVT-DT 13 KERA-HD
and use the following script, called tape, in my bin directory:
#!/bin/sh ext=`date +'%m-%d-%H-%M-%S'` tapeit='/tmp/tapeit-'${ext} stopit='/tmp/stopit' file='~/Videos/'${ext}'-'$1 pat='s/^'$1' //p;d' chan=`sed "${pat}" ~/bin/favorites.txt` if [ "${chan}" == "" ]; then echo "Valid channels:"; cat ~/bin/favorites.txt; exit; fi echo "azap -r -c ~/channels.conf '${chan}' > /dev/null & cat /dev/dvb/adapter0/dvr0 > ${file}" > ${tapeit} echo 'killall -q azap cat' > ${stopit} if [ "$2" = "now" ]; then sh ${tapeit}; else at -f ${tapeit} $2; fi if [ -z "$3" ]; then at -f ${stopit} now + 1 hour; else at -f ${stopit} $3; fi
For example, to tape something on KDFW-DT (channel 4) between 5pm and 6pm you execute:
tape 4 5pm 6pm
(note that for a 1080i channel, you will need 6GB/hour disk space). The result will be written in the directory Video under a name that contains date/time/channel. Then you can use mplayer to watch this file.