DVR - Linux Shuttle


Recently I built my own Linux RAID1 NAS II Shuttle to store all my data. But not only does it store all my data, but this headless server handles all my BitTorrent downloads, and streams media to my PS3 frontend.



I thought it would be cool to try to add Digital Video Recording capabilities to the NAS. I picked up a Hauppauge WinTV Nova-T SE Digital Video Broadcast Terrestrial (DVB-T) USB Stick for 25 squids at PC world.

The reason the devices are so cheap now, is that they only contain tuners, and rely on software on the PC to decode the MPEG2 Transport Stream. The plan here is to use the Linux NAS to dump the MPEG2 Transport Stream to disk and then use mencoder to convert to DivX. Then wrap a PHP web front end around the Linux commands and stream via DLNA to my PS3. Similar to my BitTorrent downloads. DVR all for 25squids and a bit of hard work...


Building a custom DVR:

  • Install Drivers

  • Tune the channels

  • Recording programs

  • Web DVR Frontend


    Install Drivers

    Hauppauge do not supply any Linux drivers for their kit so I had to rely on OpenSource and the work being done over at www.linuxtv.org. Once again its an OpenSource project with outdated confusing documentation and folk working on cutting edge kernels.

    Unfortunately there is no binary package for the DVB-T drivers. First I had to install some of the development environment.

    
    [root@vader ~]# yum install gcc kernel-devel kernel-headers
    

    After this I installed the Mercurial software packages, which is a cross-platform, distributed source management tool for software developers:

    
    [root@vader ~]# yum install mercurial
    

    Once I had Mercurial installed I could download the latest v4l-dvb source code from LinuxTV:

    
    [root@vader ~]# hg clone http://linuxtv.org/hg/v4l-dvb
    

    Next up was to try to compile the software:

    
    [root@vader ~]# cd v4l-dvb
    [root@vader ~]# make
    

    As usual for OpenSource software the compile crashed and burned:

    
      CC [M]  /tmp/f/v4l-dvb/v4l/videodev.o
    /tmp/f/v4l-dvb/v4l/videodev.c:499: error: unknown field 'dev_attrs' specified in initializer
    /tmp/f/v4l-dvb/v4l/videodev.c:499: warning: initialization from incompatible pointer type
    /tmp/f/v4l-dvb/v4l/videodev.c:500: error: unknown field 'dev_release' specified in initializer
    /tmp/f/v4l-dvb/v4l/videodev.c:500: warning: missing braces around initializer
    /tmp/f/v4l-dvb/v4l/videodev.c:500: warning: (near initialization for 'video_class.subsys')
    /tmp/f/v4l-dvb/v4l/videodev.c:500: warning: initialization from incompatible pointer type
    make[3]: *** [/tmp/f/v4l-dvb/v4l/videodev.o] Error 1
    make[2]: *** [_module_/tmp/f/v4l-dvb/v4l] Error 2
    make[2]: Leaving directory `/usr/src/kernels/2.6.18-53.1.21.el5-i686'
    make[1]: *** [default] Error 2
    make[1]: Leaving directory `/tmp/f/v4l-dvb/v4l'
    make: *** [all] Error 2
    

    After a bit of Googling I found that the software does not compile properly on 2.6.18 kernels, which is what I have. Luckily there was a patch available:

    
    diff -r b9523a14ccea linux/drivers/media/video/v4l1-compat.c
    --- a/linux/drivers/media/video/v4l1-compat.c Sun Nov 04 14:34:05 2007
    -0200
    +++ b/linux/drivers/media/video/v4l1-compat.c Wed Nov 07 00:00:45 2007
    -0600
    @@ -145,7 +145,7 @@ const static unsigned int palette2pixelf
    [VIDEO_PALETTE_YUV422P] = V4L2_PIX_FMT_YUV422P,
    };
    
    -static unsigned int __pure
    +static unsigned int /* __pure */
    palette_to_pixelformat(unsigned int palette)
    {
    if (palette < ARRAY_SIZE(palette2pixelformat))
    diff -r b9523a14ccea linux/drivers/media/video/videodev.c
    --- a/linux/drivers/media/video/videodev.c Sun Nov 04 14:34:05 2007
    -0200
    +++ b/linux/drivers/media/video/videodev.c Tue Nov 06 19:31:57 2007
    -0600
    @@ -111,7 +111,7 @@ static void video_release(struct device
    vfd->release(vfd);
    }
    
    -#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,13)
    +#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,19)
    static struct device_attribute video_device_attrs[] = {
    __ATTR(name, S_IRUGO, show_name, NULL),
    __ATTR_NULL
    @@ -120,7 +120,7 @@ static struct device_attribute video_dev
    
    static struct class video_class = {
    .name = VIDEO_NAME,
    -#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,13)
    +#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
    .release = video_release,
    #else
    .dev_attrs = video_device_attrs,
    

    Unfortunately this patch completely failed to work using the patch command:

    
    [root@vader ~]# patch -p1 < patch.txt
    
    patch: **** malformed patch at line 7: [VIDEO_PALETTE_YUV422P] = V4L2_PIX_FMT_YUV422P,
    

    Bugger. Anyway its such a small patch that I applied the differences by hand to the two files.

    The manual edits fixed this issue and the compile made it a little further but then failed:

    
      CC [M]  /tmp/f/v4l-dvb/v4l/drx397xD.o
    /tmp/f/v4l-dvb/v4l/drx397xD.c: In function 'drx_tune':
    /tmp/f/v4l-dvb/v4l/drx397xD.c:1066: error: implicit declaration of function 'div64_64'
    make[3]: *** [/tmp/f/v4l-dvb/v4l/drx397xD.o] Error 1
    make[2]: *** [_module_/tmp/f/v4l-dvb/v4l] Error 2
    make[2]: Leaving directory `/usr/src/kernels/2.6.18-53.1.21.el5-i686'
    make[1]: *** [default] Error 2
    make[1]: Leaving directory `/tmp/f/v4l-dvb/v4l'
    make: *** [all] Error 2
    

    This time there was no help on Google. So I edited drx397xD.c and commented out the lines.

    
                    /* Configure bandwidth specific factor */
    /*
                    ebx = div64_u64(((u64) (s->f_osc) << 21) + (ebx >> 1),
                                         (u64)ebx) - 0x800000;
                    EXIT_RC(WR16(s, 0x0c50010, ebx & 0xffff));
                    EXIT_RC(WR16(s, 0x0c50011, ebx >> 16));
    */
                    /* drx397xD oscillator calibration */
    /*
                    ebx = div64_u64(((u64) (s->config.f_if + df_tuner) << 28) +
                                         (s->f_osc >> 1), (u64)s->f_osc);
    */
    

    After this the compile completed successfully. I just hope this function is not used :-)

    
    [root@vader ~]# make install
    

    I rebooted the computer, but no USB WinTV stick detected on startup.

    To get the drivers to load I had to use make load:

    [root@vader ~]# make load
    
    /sbin/modprobe video-buf
    /sbin/modprobe snd
    /sbin/modprobe i2c-algo-bit
    /sbin/modprobe snd-page-alloc
    /sbin/modprobe i2c-core
    /sbin/modprobe parport
    /sbin/modprobe snd-pcm
    /sbin/insmod ./itd1000.ko
    /sbin/insmod ./s5h1411.ko
    /sbin/insmod ./nxt6000.ko
    /sbin/insmod ./ttusbdecfe.ko
    /sbin/insmod ./tuner-xc2028.ko
    /sbin/insmod ./dib0070.ko
    /sbin/insmod ./tda826x.ko
    /sbin/insmod ./tda10048.ko
    /sbin/insmod ./ttpci-eeprom.ko
    /sbin/insmod ./cx24123.ko
    /sbin/insmod ./saa7146.ko
    /sbin/insmod ./tea6420.ko
    /sbin/insmod ./dabusb.ko
    /sbin/insmod ./bt866.ko
    /sbin/insmod ./saa7191.ko
    /sbin/insmod ./saa7111.ko
    /sbin/insmod ./tda827x.ko
    /sbin/insmod ./cx24110.ko
    /sbin/insmod ./ir-common.ko
    /sbin/insmod ./tveeprom.ko
    /sbin/insmod ./l64781.ko
    /sbin/insmod ./ovcamchip.ko
    /sbin/insmod ./videobuf-core.ko
    insmod: error inserting './videobuf-core.ko': -1 Invalid module format
    /sbin/insmod ./saa7110.ko
    /sbin/insmod ./bt819.ko
    /sbin/insmod ./mt2131.ko
    /sbin/insmod ./tda9840.ko
    /sbin/insmod ./tda8290.ko
    /sbin/insmod ./sp8870.ko
    /sbin/insmod ./drx397xD.ko
    /sbin/insmod ./v4l2-int-device.ko
    /sbin/insmod ./au8522.ko
    /sbin/insmod ./dvb-pll.ko
    /sbin/insmod ./saa6588.ko
    /sbin/insmod ./v4l2-common.ko
    /sbin/insmod ./vpx3220.ko
    /sbin/insmod ./bcm3510.ko
    /sbin/insmod ./ves1820.ko
    /sbin/insmod ./nxt200x.ko
    /sbin/insmod ./mxl5005s.ko
    /sbin/insmod ./tda9875.ko
    /sbin/insmod ./tea5761.ko
    /sbin/insmod ./tda1004x.ko
    /sbin/insmod ./cx88-vp3054-i2c.ko
    /sbin/insmod ./xc5000.ko
    /sbin/insmod ./qt1010.ko
    /sbin/insmod ./isl6405.ko
    /sbin/insmod ./dvb-core.ko
    /sbin/insmod ./v4l1-compat.ko
    /sbin/insmod ./saa6752hs.ko
    /sbin/insmod ./mt312.ko
    /sbin/insmod ./tea5767.ko
    /sbin/insmod ./mt352.ko
    /sbin/insmod ./tda10086.ko
    /sbin/insmod ./s5h1420.ko
    /sbin/insmod ./videocodec.ko
    /sbin/insmod ./cx22700.ko
    /sbin/insmod ./cx22702.ko
    /sbin/insmod ./dvb-usb-af9005-remote.ko
    /sbin/insmod ./tda10021.ko
    /sbin/insmod ./tda18271.ko
    /sbin/insmod ./zl10353.ko
    /sbin/insmod ./btcx-risc.ko
    /sbin/insmod ./mt2060.ko
    /sbin/insmod ./tuner-3036.ko
    /sbin/insmod ./isl6421.ko
    /sbin/insmod ./mt20xx.ko
    /sbin/insmod ./tda9887.ko
    /sbin/insmod ./saa7114.ko
    /sbin/insmod ./tua6100.ko
    /sbin/insmod ./tda10023.ko
    /sbin/insmod ./tuner-types.ko
    /sbin/insmod ./snd-bt87x.ko
    /sbin/insmod ./tea6415c.ko
    /sbin/insmod ./dibx000_common.ko
    insmod: error inserting './dibx000_common.ko': -1 File exists
    /sbin/insmod ./ks0127.ko
    /sbin/insmod ./lnbp21.ko
    /sbin/insmod ./mt2266.ko
    /sbin/insmod ./s5h1409.ko
    /sbin/insmod ./saa7185.ko
    /sbin/insmod ./tda8083.ko
    /sbin/insmod ./dib3000mb.ko
    /sbin/insmod ./adv7170.ko
    /sbin/insmod ./compat_ioctl32.ko
    /sbin/insmod ./bt856.ko
    /sbin/insmod ./stv0297.ko
    /sbin/insmod ./sp887x.ko
    /sbin/insmod ./ves1x93.ko
    /sbin/insmod ./adv7175.ko
    /sbin/insmod ./videobuf-vmalloc.ko
    insmod: error inserting './videobuf-vmalloc.ko': -1 Unknown symbol in module
    /sbin/insmod ./tda7432.ko
    insmod: error inserting './tda7432.ko': -1 Unknown symbol in module
    /sbin/insmod ./m52790.ko
    /sbin/insmod ./zr36016.ko
    /sbin/insmod ./lgdt330x.ko
    /sbin/insmod ./msp3400.ko
    insmod: error inserting './msp3400.ko': -1 Unknown symbol in module
    /sbin/insmod ./cx2341x.ko
    /sbin/insmod ./videobuf-dvb.ko
    insmod: error inserting './videobuf-dvb.ko': -1 Unknown symbol in module
    /sbin/insmod ./saa7127.ko
    /sbin/insmod ./tvp5150.ko
    /sbin/insmod ./cs53l32a.ko
    /sbin/insmod ./zr36050.ko
    /sbin/insmod ./b2c2-flexcop.ko
    /sbin/insmod ./saa717x.ko
    /sbin/insmod ./or51211.ko
    /sbin/insmod ./tlv320aic23b.ko
    /sbin/insmod ./ir-kbd-i2c.ko
    /sbin/insmod ./dib7000p.ko
    /sbin/insmod ./dvb-ttusb-budget.ko
    /sbin/insmod ./videobuf-dma-sg.ko
    insmod: error inserting './videobuf-dma-sg.ko': -1 Unknown symbol in module
    /sbin/insmod ./tvaudio.ko
    /sbin/insmod ./upd64031a.ko
    /sbin/insmod ./dvb-usb.ko
    /sbin/insmod ./wm8775.ko
    /sbin/insmod ./dib7000m.ko
    /sbin/insmod ./tuner-simple.ko
    /sbin/insmod ./vp27smpx.ko
    /sbin/insmod ./saa7115.ko
    /sbin/insmod ./dib3000mc.ko
    insmod: error inserting './dib3000mc.ko': -1 File exists
    /sbin/insmod ./au0828.ko
    /sbin/insmod ./pluto2.ko
    /sbin/insmod ./upd64083.ko
    /sbin/insmod ./tuner.ko
    insmod: error inserting './tuner.ko': -1 Unknown symbol in module
    /sbin/insmod ./stv0299.ko
    /sbin/insmod ./cs5345.ko
    /sbin/insmod ./cinergyT2.ko
    /sbin/insmod ./ov7670.ko
    /sbin/insmod ./zr36060.ko
    /sbin/insmod ./ttusb_dec.ko
    /sbin/insmod ./budget-core.ko
    /sbin/insmod ./videodev.ko
    /sbin/insmod ./cx25840.ko
    /sbin/insmod ./or51132.ko
    /sbin/insmod ./wm8739.ko
    /sbin/insmod ./w9966.ko
    /sbin/insmod ./dvb-usb-dibusb-common.ko
    /sbin/insmod ./saa5246a.ko
    /sbin/insmod ./dvb-usb-ttusb2.ko
    /sbin/insmod ./dvb-usb-vp7045.ko
    /sbin/insmod ./saa7146_vv.ko
    insmod: error inserting './saa7146_vv.ko': -1 Unknown symbol in module
    /sbin/insmod ./zr364xx.ko
    /sbin/insmod ./ivtv.ko
    /sbin/insmod ./sn9c102.ko
    /sbin/insmod ./usbvision.ko
    /sbin/insmod ./cx88xx.ko
    insmod: error inserting './cx88xx.ko': -1 Unknown symbol in module
    /sbin/insmod ./em28xx.ko
    insmod: error inserting './em28xx.ko': -1 Unknown symbol in module
    /sbin/insmod ./pvrusb2.ko
    /sbin/insmod ./dvb-usb-af9005.ko
    /sbin/insmod ./cpia.ko
    /sbin/insmod ./c-qcam.ko
    /sbin/insmod ./b2c2-flexcop-pci.ko
    /sbin/insmod ./bttv.ko
    insmod: error inserting './bttv.ko': -1 Unknown symbol in module
    /sbin/insmod ./dvb-usb-opera.ko
    /sbin/insmod ./dvb-usb-cxusb.ko
    /sbin/insmod ./dvb-usb-gp8psk.ko
    /sbin/insmod ./budget-ci.ko
    /sbin/insmod ./zc0301.ko
    /sbin/insmod ./saa7134.ko
    insmod: error inserting './saa7134.ko': -1 Unknown symbol in module
    /sbin/insmod ./dsbr100.ko
    /sbin/insmod ./radio-gemtek-pci.ko
    /sbin/insmod ./radio-maxiradio.ko
    /sbin/insmod ./et61x251.ko
    /sbin/insmod ./dvb-usb-vp702x.ko
    /sbin/insmod ./dvb-usb-dib0700.ko
    /sbin/insmod ./dvb-usb-m920x.ko
    /sbin/insmod ./cx18.ko
    /sbin/insmod ./dvb-usb-au6610.ko
    /sbin/insmod ./saa5249.ko
    /sbin/insmod ./usbvideo.ko
    /sbin/insmod ./radio-maestro.ko
    /sbin/insmod ./b2c2-flexcop-usb.ko
    /sbin/insmod ./vivi.ko
    insmod: error inserting './vivi.ko': -1 Unknown symbol in module
    /sbin/insmod ./budget.ko
    /sbin/insmod ./stv680.ko
    /sbin/insmod ./dvb-usb-digitv.ko
    /sbin/insmod ./bw-qcam.ko
    /sbin/insmod ./pwc.ko
    /sbin/insmod ./dvb-usb-anysee.ko
    /sbin/insmod ./se401.ko
    /sbin/insmod ./zr36067.ko
    insmod: error inserting './zr36067.ko': -1 No such device
    /sbin/insmod ./cpia2.ko
    /sbin/insmod ./snd-tea575x-tuner.ko
    /sbin/insmod ./cx23885.ko
    insmod: error inserting './cx23885.ko': -1 Unknown symbol in module
    /sbin/insmod ./stradis.ko
    /sbin/insmod ./dvb-usb-dtt200u.ko
    /sbin/insmod ./ov511.ko
    /sbin/insmod ./w9968cf.ko
    /sbin/insmod ./dvb-usb-gl861.ko
    /sbin/insmod ./vicam.ko
    /sbin/insmod ./budget-patch.ko
    /sbin/insmod ./saa7134-empress.ko
    insmod: error inserting './saa7134-empress.ko': -1 Unknown symbol in module
    /sbin/insmod ./em28xx-dvb.ko
    insmod: error inserting './em28xx-dvb.ko': -1 Unknown symbol in module
    /sbin/insmod ./dvb-usb-dibusb-mc.ko
    /sbin/insmod ./quickcam_messenger.ko
    /sbin/insmod ./ibmcam.ko
    /sbin/insmod ./hexium_gemini.ko
    insmod: error inserting './hexium_gemini.ko': -1 Unknown symbol in module
    /sbin/insmod ./em28xx-alsa.ko
    insmod: error inserting './em28xx-alsa.ko': -1 Unknown symbol in module
    /sbin/insmod ./saa7134-alsa.ko
    insmod: error inserting './saa7134-alsa.ko': -1 Unknown symbol in module
    /sbin/insmod ./dvb-usb-a800.ko
    /sbin/insmod ./cpia_pp.ko
    /sbin/insmod ./konicawc.ko
    /sbin/insmod ./cpia_usb.ko
    /sbin/insmod ./dvb-usb-nova-t-usb2.ko
    /sbin/insmod ./ivtvfb.ko
    insmod: error inserting './ivtvfb.ko': -1 No such device
    /sbin/insmod ./ultracam.ko
    /sbin/insmod ./dvb-usb-umt-010.ko
    /sbin/insmod ./dpc7146.ko
    insmod: error inserting './dpc7146.ko': -1 Unknown symbol in module
    /sbin/insmod ./bt878.ko
    insmod: error inserting './bt878.ko': -1 Unknown symbol in module
    /sbin/insmod ./cx8800.ko
    insmod: error inserting './cx8800.ko': -1 Unknown symbol in module
    /sbin/insmod ./budget-av.ko
    insmod: error inserting './budget-av.ko': -1 Unknown symbol in module
    /sbin/insmod ./cx8802.ko
    insmod: error inserting './cx8802.ko': -1 Unknown symbol in module
    /sbin/insmod ./hexium_orion.ko
    insmod: error inserting './hexium_orion.ko': -1 Unknown symbol in module
    /sbin/insmod ./dvb-usb-dibusb-mb.ko
    /sbin/insmod ./mxb.ko
    insmod: error inserting './mxb.ko': -1 Unknown symbol in module
    /sbin/insmod ./dvb-ttpci.ko
    insmod: error inserting './dvb-ttpci.ko': -1 Unknown symbol in module
    /sbin/insmod ./saa7134-dvb.ko
    insmod: error inserting './saa7134-dvb.ko': -1 Unknown symbol in module
    /sbin/insmod ./cx88-alsa.ko
    insmod: error inserting './cx88-alsa.ko': -1 Unknown symbol in module
    /sbin/insmod ./cx88-dvb.ko
    insmod: error inserting './cx88-dvb.ko': -1 Unknown symbol in module
    /sbin/insmod ./dst.ko
    insmod: error inserting './dst.ko': -1 Unknown symbol in module
    /sbin/insmod ./dvb-bt8xx.ko
    insmod: error inserting './dvb-bt8xx.ko': -1 Unknown symbol in module
    /sbin/insmod ./cx88-blackbird.ko
    insmod: error inserting './cx88-blackbird.ko': -1 Unknown symbol in module
    /sbin/insmod ./dst_ca.ko
    insmod: error inserting './dst_ca.ko': -1 Unknown symbol in module
    make[1]: Leaving directory `/tmp/m/v4l-dvb/v4l'
    

    However this loads tons of stuff I don't need, and a lot fail to load. What I need is the exact modules I need.

    
    /sbin/modprobe video-buf
    /sbin/modprobe snd
    /sbin/modprobe i2c-algo-bit
    /sbin/modprobe snd-page-alloc
    /sbin/modprobe i2c-core
    /sbin/modprobe parport
    /sbin/modprobe snd-pcm
    /sbin/insmod /lib/modules/2.6.18-53.el5/kernel/drivers/media/video/dabusb.ko
    /sbin/insmod /lib/modules/2.6.18-53.el5/kernel/drivers/media/dvb/frontends/dib0070.ko
    /sbin/insmod /lib/modules/2.6.18-53.el5/kernel/drivers/media/video/v4l2-int-device.ko
    /sbin/insmod /lib/modules/2.6.18-53.el5/kernel/drivers/media/video/v4l2-common.ko
    /sbin/insmod /lib/modules/2.6.18-53.el5/kernel/drivers/media/video/videodev.ko
    /sbin/insmod /lib/modules/2.6.18-53.el5/kernel/drivers/media/dvb/dvb-core/dvb-core.ko
    /sbin/insmod /lib/modules/2.6.18-53.el5/kernel/drivers/media/video/v4l1-compat.ko
    /sbin/insmod /lib/modules/2.6.18-53.el5/kernel/drivers/media/video/videocodec.ko
    /sbin/insmod /lib/modules/2.6.18-53.el5/kernel/drivers/media/dvb/frontends/dibx000_common.ko
    /sbin/insmod /lib/modules/2.6.18-53.el5/kernel/drivers/media/dvb/dvb-usb/dvb-usb.ko
    /sbin/insmod /lib/modules/2.6.18-53.el5/kernel/drivers/media/dvb/frontends/dib3000mc.ko
    /sbin/insmod /lib/modules/2.6.18-53.el5/kernel/drivers/media/dvb/frontends/dib3000mb.ko
    /sbin/insmod /lib/modules/2.6.18-53.el5/kernel/drivers/media/dvb/dvb-usb/dvb-usb-dibusb-common.ko
    /sbin/insmod /lib/modules/2.6.18-53.el5/kernel/drivers/media/common/tuners/tuner-types.ko
    /sbin/insmod /lib/modules/2.6.18-53.el5/kernel/drivers/media/common/tuners/tuner-simple.ko
    /sbin/insmod /lib/modules/2.6.18-53.el5/kernel/drivers/media/dvb/frontends/dib7000p.ko
    /sbin/insmod /lib/modules/2.6.18-53.el5/kernel/drivers/media/dvb/frontends/dib7000m.ko
    /sbin/insmod /lib/modules/2.6.18-53.el5/kernel/drivers/media/dvb/dvb-usb/dvb-usb-dib0700.ko
    /sbin/insmod /lib/modules/2.6.18-53.el5/kernel/drivers/media/dvb/dvb-usb/dvb-usb-nova-t-usb2.ko
    chmod o+rw /dev/dvb/adapter0/frontend0
    chmod o+rw /dev/dvb/adapter0/demux0
    chmod o+rw /dev/dvb/adapter0/dvr0
    

    A quick check of dmesg confirms all the modules and drivers loaded ok:

    [root@vader ~]# make install
    
    Linux video codec intermediate layer: v0.2
    dib0700: loaded with support for 7 different device-types
    dvb-usb: found a 'Hauppauge Nova-T Stick' in warm state.
    dvb-usb: will pass the complete MPEG2 transport stream to the software demuxer.
    DVB: registering new adapter (Hauppauge Nova-T Stick)
    DVB: registering frontend 0 (DiBcom 7000PC)...
    DiB0070: successfully identified
    input: IR-receiver inside an USB DVB receiver as /class/input/input1
    dvb-usb: schedule remote query interval to 150 msecs.
    dvb-usb: Hauppauge Nova-T Stick successfully initialized and connected.
    usbcore: registered new driver dvb_usb_dib0700
    usbcore: registered new driver dvb_usb_nova_t_usb2
    

    To allow non root users to record it is necessary to change the permissions on the devices:

    
    [root@vader s]# chmod o+rw /dev/dvb/adapter0/frontend0
    [root@vader s]# chmod o+rw /dev/dvb/adapter0/demux0
    [root@vader s]# chmod o+rw /dev/dvb/adapter0/dvr0
    

    Since the modules will not be reloaded on reboot, and the device permissions will be reset, it is necessary to add a startup script to /etc/rc3.d:

    
    -rwxr-xr-x 1 root root 1935 Jun 22 19:08 S99usbtv
    

    I now have a working DVR-T so now lets get recording!


    Tune Channels

    The drivers cannot auto-tune so you need to supply the info about your Digital Transmitter. Fortunately the drivers come with a list of all the UK Transmitters. To find out the Transmitter for your area check www.freeview.co.uk

    
    [root@vader s]# scan /usr/share/dvb/dvb-t/uk-Hannington
    
    scanning /usr/share/dvb/dvb-t/uk-Hannington
    using '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0'
    initial transponder 706000000 0 3 9 1 0 0 0
    >>> tune to: 706000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_AUTO:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE
    Network Name 'Hannington'
    0x0000 0x113f: pmt_pid 0x113f BBC -- BBC NEWS (running)
    0x0000 0x117f: pmt_pid 0x117f BBC -- BBCi (running)
    0x0000 0x123f: pmt_pid 0x123f BBC -- CBBC Channel (running)
    0x0000 0x1043: pmt_pid 0x1043 BBC -- BBC ONE (running)
    0x0000 0x10ff: pmt_pid 0x10ff BBC -- BBC THREE (running)
    0x0000 0x1083: pmt_pid 0x1083 BBC -- BBC TWO (running)
    >>> tune to: 650166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE
    0x200f 0x204f: pmt_pid 0x0100 ITV -- ITV1 (running)
    0x200f 0x20c0: pmt_pid 0x012c Channel 4 TV -- Channel 4 (running)
    0x200f 0x2100: pmt_pid 0x0130 Channel 4 TV -- E4 (running)
    0x200f 0x2178: pmt_pid 0x0110 Teletext Limited -- Teletext (running)
    0x200f 0x2240: pmt_pid 0x0114 Channel 4 TV -- Teletext on 4 (running)
    0x200f 0x21ba: pmt_pid 0x0112 Teletext Limited -- Rabbit (running)
    0x200f 0x20a1: pmt_pid 0x0116 ITV -- ITV4 (running)
    0x200f 0x20fa: pmt_pid 0x010e Channel 4 TV -- More 4 (running)
    0x200f 0x2104: pmt_pid 0x0131 Channel 4 TV -- Channel 4+1 (running)
    0x200f 0x2085: pmt_pid 0x0102 ITV -- ITV2 (running)
    0x200f 0x2066: pmt_pid 0x0104 ITV -- ITV3 (running)
    0x200f 0x2244: pmt_pid 0x011c Global Radio -- Heart (running)
    Network Name 'Hannington'
    >>> tune to: 626166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE
    Network Name 'Hannington'
    0x3002 0x3242: pmt_pid 0x0101 five -- Five (running)
    0x3002 0x3280: pmt_pid 0x0113 five -- FIVER (running)
    0x3002 0x32c0: pmt_pid 0x0117 five -- Five US (running)
    0x3002 0x3340: pmt_pid 0x0103 QVC -- QVC (running)
    0x3002 0x37c0: pmt_pid 0x0105 Sit-Up Ltd -- bid tv (running)
    0x3002 0x3900: pmt_pid 0x010a EMAP -- Smash Hits! (running)
    0x3002 0x3940: pmt_pid 0x010b EMAP -- MOJO (running)
    0x3002 0x39c0: pmt_pid 0x010c Teletext Limited -- Ttext Holidays (running)
    0x3002 0x3a80: pmt_pid 0x010e five -- UKTV STYLE (running, scrambled)
    0x3002 0x3b80: pmt_pid 0x0112 five -- TVX / REDHOT (running)
    0x3002 0x3cc0: pmt_pid 0x0114 five -- UKTV GOLD (running, scrambled)
    0x3002 0x3d00: pmt_pid 0x0115 Sit-Up Ltd -- price-drop tv (running)
    0x3002 0x3dc0: pmt_pid 0x0118 five -- Teachers TV (running)
    0x3002 0x3e20: pmt_pid 0x0124 Turner Broadcasting System Europe Limited -- Nuts TV (running)
    0x3002 0x3e80: pmt_pid 0x011d five -- eurosport uk (running, scrambled)
    0x3002 0x3ea0: pmt_pid 0x0104 ITV -- CITV (running)
    0x3002 0x3ee0: pmt_pid 0x011c ITV -- SETANTA SPORTS (running)
    0x3002 0x3f00: pmt_pid 0x011b Teletext Limited -- TeletextCasino (running)
    0x3002 0x3f60: pmt_pid 0x0120 TopUp TV Ltd -- TOPUP Anytime1 (running, scrambled)
    0x3002 0x3f80: pmt_pid 0x0121 TopUp TV Ltd -- TOPUP Anytime2 (running, scrambled)
    0x3002 0x3fa0: pmt_pid 0x0122 TopUp TV Ltd -- TOPUP Anytime3 (running, scrambled)
    >>> tune to: 674166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE
    0x4000 0x4280: pmt_pid 0x02ca BBC -- BBC Parliament (running)
    0x4000 0x41c0: pmt_pid 0x02be BBC -- BBC FOUR (running)
    0x4000 0x4240: pmt_pid 0x02bf BBC -- CBeebies (running)
    0x4000 0x4600: pmt_pid 0x02c0 BBC -- BBC R5 Live (running)
    0x4000 0x4640: pmt_pid 0x02c1 BBC -- BBC 5L SportsX (running)
    0x4000 0x4680: pmt_pid 0x02c2 BBC -- BBC 6 Music (running)
    0x4000 0x46c0: pmt_pid 0x02c3 BBC -- BBC 7 (running)
    0x4000 0x4700: pmt_pid 0x02c4 BBC -- 1Xtra BBC (running)
    0x4000 0x4740: pmt_pid 0x02c5 BBC -- BBC Asian Net. (running)
    0x4000 0x4c00: pmt_pid 0x02c6 BBC -- 301 (running)
    0x4000 0x4c40: pmt_pid 0x02c7 BBC -- 302 (running)
    0x4000 0x4c80: pmt_pid 0x02c8 BBC -- 303 (running)
    0x4000 0x4180: pmt_pid 0x02bd BBC -- 305 (running)
    0x4000 0x4e00: pmt_pid 0x02c9 BBC -- Community (running)
    0x4000 0x4840: pmt_pid 0x02cb BBC -- BBC Radio 1 (running)
    0x4000 0x4880: pmt_pid 0x02cc BBC -- BBC Radio 2 (running)
    0x4000 0x48c0: pmt_pid 0x02cd BBC -- BBC Radio 3 (running)
    0x4000 0x4900: pmt_pid 0x02ce BBC -- BBC Radio 4 (running)
    Network Name 'Hannington'
    >>> tune to: 658166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE
    0x5000 0x5740: pmt_pid 0x02c1 Channel 4 TV -- E4+1 (running)
    0x5000 0x5640: pmt_pid 0x02bd Sky -- Sky News (running)
    0x5000 0x5680: pmt_pid 0x02be Sky -- Sky Spts News (running)
    0x5000 0x56c0: pmt_pid 0x02bf Sky -- SKY THREE (running)
    0x5000 0x5840: pmt_pid 0x02c2 talkSPORT -- talkSPORT (running)
    0x5000 0x5c80: pmt_pid 0x02cd Sky -- Sky Text (running)
    0x5000 0x5a40: pmt_pid 0x02ca Virgin Radio -- Virgin Radio (running)
    0x5000 0x5cc0: pmt_pid 0x02cf yoomedia -- tvtv DIGITAL (running)
    0x5000 0x5700: pmt_pid 0x02c0 UKTV -- Dave (running)
    0x5000 0x5780: pmt_pid 0x02cc Square1 Management Ltd -- smileTV (running)
    0x5000 0x59c0: pmt_pid 0x02c8 London Christian Radio Ltd -- Premier Radio (running)
    0x5000 0x5a00: pmt_pid 0x02c9 Score Digital -- Clyde 1 (running)
    Network Name 'Hannington'
    >>> tune to: 634166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE
    0x6000 0x6440: pmt_pid 0x03e9 EMAP -- The HITS (running)
    0x6000 0x6480: pmt_pid 0x03ea MTV Europe -- TMF (running)
    0x6000 0x64c0: pmt_pid 0x03eb UKTV -- UKTV History (running)
    0x6000 0x6500: pmt_pid 0x03ec Flextech -- Virgin1 (running)
    0x6000 0x6540: pmt_pid 0x03ed CCI -- Ideal World (running)
    0x6000 0x6640: pmt_pid 0x03fd EMAP -- Kiss (running)
    0x6000 0x66c0: pmt_pid 0x03ff EMAP -- Kerrang! (running)
    0x6000 0x6700: pmt_pid 0x0400 GMG -- SMOOTH RADIO (running)
    0x6000 0x67c0: pmt_pid 0x0403 EMAP -- The Hits Radio (running)
    0x6000 0x6800: pmt_pid 0x0404 EMAP -- Magic (running)
    0x6000 0x6840: pmt_pid 0x0405 EMAP -- Q (running)
    0x6000 0x6980: pmt_pid 0x0407 4TV Ltd -- 4TVinteractive (running)
    0x6000 0x69c0: pmt_pid 0x03ee ITV -- ITV2 +1 (running)
    0x6000 0x6a00: pmt_pid 0x03f0 Channel 4 TV -- Film4 (running)
    0x6000 0x6780: pmt_pid 0x0402 BBC -- BBC World Sv. (running)
    0x6000 0x6680: pmt_pid 0x03fe EMAP -- heat (running)
    0x6000 0x6a40: pmt_pid 0x03f1 Channel 4 -- Gems TV (running)
    0x6000 0x6a80: pmt_pid 0x03f2 Camelot Group plc -- Lottery Xtra (running)
    Network Name 'Hannington'
    dumping lists (88 services)
    BBC THREE:706000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:4351
    BBC NEWS:706000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:640:641:4415
    BBCi:706000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:4479
    CBBC Channel:706000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:620:621:4671
    BBC TWO:706000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:610:611:4227
    BBC ONE:706000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:600:601:4163
    ITV1:650166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:520:521:8271
    Teletext:650166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:8568
    Rabbit:650166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:789:8634
    Teletext on 4:650166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:8768
    Channel 4:650166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:560:561:8384
    E4:650166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:570:571:8448
    More 4:650166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:590:591:8442
    Channel 4+1:650166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:580:581:8452
    ITV4:650166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:600:601:8353
    [2243]:650166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:621:8771
    Heart:650166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:631:8772
    ITV2:650166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:530:531:8325
    ITV3:650166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:540:541:8294
    Five:626166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:6017:6018:12866
    FIVER:626166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:6673:6674:12928
    Five US:626166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:6689:6690:12992
    QVC:626166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:6049:6050:13120
    bid tv:626166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:6273:6274:14272
    Smash Hits!:626166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:6306:14592
    MOJO:626166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:6322:14656
    Ttext Holidays:626166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:6354:14784
    UKTV STYLE:626166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:14976
    TVX / REDHOT:626166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:15232
    UKTV GOLD:626166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:15552
    price-drop tv:626166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:6513:6514:15616
    Teachers TV:626166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:15808
    Nuts TV:626166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:15904
    eurosport uk:626166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:16000
    CITV:626166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:6833:6834:16032
    SETANTA SPORTS:626166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:16096
    TeletextCasino:626166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:6754:16128
    TOPUP Anytime1:626166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:6705:6706:16224
    TOPUP Anytime2:626166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:16256
    TOPUP Anytime3:626166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_2_3:FEC_1_2:QAM_64:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:6737:6738:16288
    302:674166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:19520
    301:674166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:203:407:19456
    BBC Radio 4:674166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:439:18688
    BBC Radio 3:674166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:438:18624
    BBC Radio 2:674166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:437:18560
    BBC Radio 1:674166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:436:18496
    BBC Asian Net.:674166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:435:18240
    1Xtra BBC:674166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:434:18176
    BBC 7:674166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:433:18112
    BBC 6 Music:674166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:432:18048
    BBC 5L SportsX:674166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:431:17984
    BBC R5 Live:674166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:430:17920
    BBC Parliament:674166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:205:421:17024
    CBeebies:674166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:201:401:16960
    BBC FOUR:674166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:16832
    305:674166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:403:16768
    Community:674166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:204:411:19968
    303:674166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:19584
    tvtv DIGITAL:658166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:23744
    Sky Text:658166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:23680
    Virgin Radio:658166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:1901:23104
    Clyde 1:658166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:1801:23040
    Premier Radio:658166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:1701:22976
    talkSPORT:658166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:1101:22592
    smileTV:658166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:401:402:22400
    E4+1:658166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:501:502:22336
    Dave:658166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:22272
    SKY THREE:658166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:301:302:22208
    Sky Spts News:658166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:201:202:22144
    Sky News:658166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:101:102:22080
    Film4:634166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:701:702:27136
    ITV2 +1:634166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:601:602:27072
    4TVinteractive:634166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:27008
    Q:634166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:1901:26688
    Magic:634166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:1801:26624
    The Hits Radio:634166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:1701:26560
    BBC World Sv.:634166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:1601:26496
    SMOOTH RADIO:634166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:1401:26368
    Kerrang!:634166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:1301:26304
    heat:634166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:1201:26240
    Kiss:634166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:1101:26176
    Ideal World:634166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:501:502:25920
    Virgin1:634166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:25856
    UKTV History:634166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:301:302:25792
    TMF:634166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:201:202:25728
    The HITS:634166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:101:102:25664
    Lottery Xtra:634166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:27264
    Gems TV:634166670:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:0:0:27200
    Done.
    

    Note this places a file in the .mplayer users home directory:

    
    [root@vader video]# ls -l /root/.mplayer/
    
    -rw-r--r-- 1 root root 12484 Jun 20 01:27 channels.conf
    

    If you want to record as another user you need to copy this file, or generate another one and place in that users home directory.


    Recording

    All digital broadcasts are transmitted in MPEG-2 transport streams. To record you simply need to dump the MPEG-2 Transport Stream to disk:

    
    mplayer -noconsolecontrols -dumpstream -dumpfile ts-stream dvb://"BBC ONE"  &
    

    To record for a set period of time needs a little shell script. mplayers --end-pos argument does not work as expected.

    
    mplayer -noconsolecontrols -dumpstream -dumpfile ts-stream dvb://"BBC ONE"  &
    PID=$! 
    sleep 60 
    kill $PID 
    sleep 5 
    kill -9 $PID
    

    The TS MPEG-2 file can be played by a number of media players, but I prefer to convert it to DivX:

    
    mencoder -forceidx -vf scale=640:-2 -ovc xvid 
    	-xvidencopts "quant_type=mpeg:bitrate=1000:nopacked" 
    	-oac mp3lame -lameopts cbr:br=192
    	ts-stream -o output.avi
    

    I have just used a single pass encode with a bit rate of above, but I could use a two pass encode for slightly better quality. Also rather than dumping the MPEG2 Transport Stream to disk it is possible to encode to DivX on the fly. But this needs a fast CPU and the quality would not be as good:

    
    mencoder dvb://ITV1 -forceidx 
    	-vf scale=640:-2 -ovc xvid 
    	-xvidencopts "quant_type=mpeg:bitrate=1000:nopacked" 
    	-oac mp3lame -lameopts cbr:br=192
    	-o output.avi
    

    Web DVR Frontend:

    Now I can record, I wrote a simple web PHP front end to schedule and kick off recording:


    Looking in the TV guide and manually entering the times into the web GUI feels a bit primitive! I downloaded a TV listings downloader program from xmltv.org. This downloads the listings in XMLTV format. I wrote a perl script to convert the XMLTV to HTML and laid it out with style sheets, so when you click on a program it calls the PHP scripts and adds it to my download cron jobs.


    It now works like any DVR like Sky+. Also because its a web front end on my headless NASII Linux Shuttle I can connect to it from anywhere on the Internet and schedule programs to record. The content is the wirelessly streamed to my PS3 in the lounge to watch.


    Back to Steve's tech pages


    Steve Watts Kirk Scott Hawes Signs Alprange Enterprise Solutions Hewlett Packard British Council Standard Chartered Bank SCB Wolseley Northampton Moulton Hull University Reading