Home

DVB-C met WindowsXP

DVB-C met Linux

CAIW DTV op de PC onder Linux met de Terratec Cincergy 1200 DVB-C kaart

Keywords: DTV, CAIW, CAI Westland, DVB-C, Linux, Terratec Cinergy 1200 DVB-C
Datum document: 1 februari 2005

ONDERSTAANDE INFORMATIE IS: AS-IS. HOEWEL IK UITERST ZORGVULDIG BEN MET DE INFORMATIE BEN JE ZELF VERANTWOORDELIJK VOOR WAT JE ER MEE DOET. VOOR MIJ WERKT DE ONTVANGST VIA HET KABELNET VAN CAIW IN WATERINGEN. CONTROLEER VOOR AANSCHAF VAN EEN KAART OF ER WEL FREE-TO-AIR WORDT AANGEBODEN VIA DE KABEL EN OF DE DVB-C STANDAARD WORDT GEBRUIKT.

DVB-C onder Linux

Deze beschrijving geeft weer hoe de Terratec Cinergy 1200 DVB-C kaart onder Linux (Fedora Core 2, met een recente kernelupdate, bijv 2.6.10-1.9_FC2) geinstalleerd wordt. Gebaseerd op de/ Based on MythTV DVB Setup Guide

1 Devices aanmaken

Het is nodig om de nodige devices aan te maken. Als deze er nog niet zijn, draai dan onderstaand script:

#!/bin/sh
   # Create device nodes for the Linux DVB API with DVB_API_VERSION 2.
   # The devices created are suitable for most current PC DVB cards,
   # i.e. cards having one frontend, one demux and optionally one
   # MPEG decoder.
   # The script creates devices for four cards by default.
if [ -e /dev/.devfsd ]; then
   echo "It seems you are using devfs. Good!"
   exit 0
   fi
# get rid of old DVB API devices; do it twice for good measure...
   rm -rf /dev/ost
   rm -rf /dev/ost
   rm -rf /dev/dvb
   rm -rf /dev/dvb
mkdir /dev/dvb
   chmod 755 /dev/dvb
for i in `seq 0 3`; do
   echo "Creating DVB devices in /dev/dvb/adapter$i"
   mkdir /dev/dvb/adapter$i
   chmod 755 /dev/dvb/adapter$i
   mknod -m 0660 /dev/dvb/adapter$i/video0 c 212 `expr 64 \* $i + 0`
   mknod -m 0660 /dev/dvb/adapter$i/audio0 c 212 `expr 64 \* $i + 1`
   mknod -m 0660 /dev/dvb/adapter$i/frontend0 c 212 `expr 64 \* $i + 3`
   mknod -m 0660 /dev/dvb/adapter$i/demux0 c 212 `expr 64 \* $i + 4`
   mknod -m 0660 /dev/dvb/adapter$i/dvr0 c 212 `expr 64 \* $i + 5`
   mknod -m 0660 /dev/dvb/adapter$i/ca0 c 212 `expr 64 \* $i + 6`
   mknod -m 0660 /dev/dvb/adapter$i/net0 c 212 `expr 64 \* $i + 7`
   mknod -m 0660 /dev/dvb/adapter$i/osd0 c 212 `expr 64 \* $i + 8`
   chown root.video /dev/dvb/adapter$i/*
   done
 

2. Juiste modules laden. Voor de Terratec Cinergy 1200 DVB-C:

#!/bin/sh

cd /lib/modules/`uname -r`

set -x

insmod ./kernel/drivers/media/video/video-buf.ko
insmod ./kernel/drivers/media/video/videodev.ko
insmod ./kernel/drivers/media/video/v4l1-compat.ko
insmod ./kernel/drivers/media/video/v4l2-common.ko
insmod ./kernel/drivers/media/dvb/dvb-core/dvb-core.ko
insmod ./kernel/drivers/media/common/saa7146.ko
insmod ./kernel/drivers/media/common/saa7146_vv.ko
insmod ./kernel/drivers/i2c/i2c-core.ko
insmod ./kernel/drivers/media/dvb/ttpci/ttpci-eeprom.ko
insmod ./kernel/drivers/media/dvb/ttpci/budget-core.ko
insmod ./kernel/drivers/media/dvb/frontends/tda10021.ko
insmod ./kernel/drivers/media/dvb/frontends/tda1004x.ko
insmod ./kernel/drivers/media/dvb/frontends/stv0299.ko
insmod ./kernel/drivers/media/dvb/ttpci/budget-av.ko

exit 0

3. De hardware moet nu herkend worden. Zie /var/log/messages:

Feb 1 20:06:32 manus kernel: Linux video capture interface: v1.00
Feb 1 20:06:33 manus kernel: saa7146: register extension 'budget dvb /w video in'.
Feb 1 20:06:33 manus kernel: PCI: Found IRQ 11 for device 0000:00:08.0
Feb 1 20:06:33 manus kernel: PCI: Sharing IRQ 11 with 0000:00:0a.2
Feb 1 20:06:33 manus kernel: PCI: Sharing IRQ 11 with 0000:00:0c.0
Feb 1 20:06:33 manus kernel: saa7146: found saa7146 @ mem d0a5a000 (revision 1, irq 11) (0x153b,0x1156).
Feb 1 20:06:33 manus kernel: DVB: registering new adapter (Terratec Cinergy 1200 DVB-C).
Feb 1 20:06:33 manus kernel: adapter failed MAC signature check
Feb 1 20:06:33 manus kernel: encoded MAC from EEPROM was ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff:ff
Feb 1 20:06:33 manus kernel: KNC1-0: MAC addr = 00:0a:ac:01:b3:7e
Feb 1 20:06:33 manus kernel: DVB: registering frontend 0 (Philips TDA10021 DVB-C)...

Als de kaart niet wordt herkend, controleer dan of de kernel recent is. De meegeleverde kernel van Fedora Core 2 is niet recent genoeg. De tuner-chip TDA10021 wordt nog niet herkend; dat is een ontwikkeling van nov/dec 2004. Kernel 2.6.10-1.9_FC2 is in ieder geval recent (probeer: yum update kernel).

4. Draai een scan

Haal de linuxtv-dvb-apps op:

Compileer de linuxtv-dvb-apps: http://www.linuxtv.org/downloads/linuxtv-dvb-apps-1.1.0.tar.bz2

# wget -N http://www.linuxtv.org/downloads/linuxtv-dvb-apps-1.1.0.tar.bz2
# tar jxvf linuxtv-dvb-apps-1.1.0.tar.bz2
# cd linuxtv-dvb-apps-1.1.0
# make
# cd util/scan/ # echo "C 554000000 6900000 NONE QAM64" > dvb-c/nl-caiw
# ./scan -5 dvb-c/nl-caiw > ../szap/channels.conf-dvbc-caiw

De kaart gaat nu scannen, en levert een lijst van kanalen op. Download hier de lijst die uit mijn scan komt. Als de scan niet lukt, probeer dan de lijst te downloaden en ga verder met de volgende stap.

5. Probeer een kanaal af te stemmen

# cd ../szap
# ./czap -c channels.conf-dvbc-caiw "RTL4"
using '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0'
59 RTL4:658000000:INVERSION_AUTO:6900000:FEC_NONE:QAM_64:512:4012:4010
59 RTL4: f 658000000, s 6900000, i 2, fec 0, qam 3, v 0x200, a 0xfac
status 1f | signal 8484 | snr e8e8 | ber 0000bdf6 | unc 00000036 | FE_HAS_LOCK
status 1f | signal 8484 | snr e8e8 | ber 0000bdf6 | unc 00000000 | FE_HAS_LOCK
status 1f | signal 8484 | snr e9e9 | ber 0000bdf6 | unc 00000000 | FE_HAS_LOCK
status 1f | signal 8484 | snr e8e8 | ber 0000bdf6 | unc 00000000 | FE_HAS_LOCK
status 1f | signal 8484 | snr e8e8 | ber 0000bdf6 | unc 00000000 | FE_HAS_LOCK
status 1f | signal 8484 | snr eaea | ber 0000bdf6 | unc 00000000 | FE_HAS_LOCK
status 1f | signal 8484 | snr eaea | ber 0000bdf6 | unc 00000000 | FE_HAS_LOCK
...

Uit de README:

The status messages have the following meaning:

status 0x1f --- The demodulator status bits.
0x1f means all bits set, everything ok.

signal [0x0000...0xffff] --- Signal Strength. Values above 0x8000 should be ok.

snr [0x0000...0xffff] --- Signal/Noise Ratio. Values above 0x8000 are ok.

ber [0...0xffffffff] --- Bit Error Rate. The less the better.

unc [0...0xffffffff] --- Number of Uncorrectable Blocks.
Small numbers are Preferable.

If everything is alright and all frontend circuits are working stable
(are locked) you should see a FE_HAS_LOCK in the rightmost line.

6. Dvbstream

Met dvbstream kun je een DVB stream (zender) de-multplexen en omzetten naar een stream die kan worden afgespeeld met mplayer of via het netwerk kan worden verspreid. De MythTV guide meldt dat we de CVS versie moeten gebruiken, en vooral niet de beschikbaar gestelde tar-balls. Om CVS te downloaden is een internetverbinding nodig:

 # mkdir dvbtools
 # cd dvbtools/
 # cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/dvbtools login
 Logging in to :pserver:anonymous@cvs.sourceforge.net:2401/cvsroot/dvbtools
 CVS password: <druk op enter, zonder een password in te geven>
 # cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/dvbtools co -P dvbstream
 cvs checkout: Updating dvbstream
 U dvbstream/CHANGES
 U dvbstream/COPYING
 U dvbstream/Makefile
 U dvbstream/README
 U dvbstream/do_route.sh
 U dvbstream/dumprtp.c
 U dvbstream/dvb_defaults.h
 U dvbstream/dvbstream.c
 U dvbstream/rtp.c
 U dvbstream/rtp.h
 U dvbstream/rtpfeed.c
 U dvbstream/rtpradio.sh
 U dvbstream/rtptv.sh
 U dvbstream/server.c
 U dvbstream/ts_filter.c
 U dvbstream/tune.c
 U dvbstream/tune.h
 cvs checkout: Updating dvbstream/TELNET
 U dvbstream/TELNET/README
 U dvbstream/TELNET/cnn.sh
 U dvbstream/TELNET/itn.sh
 U dvbstream/TELNET/svdrpsend.pl
 U dvbstream/TELNET/virgin.sh
 U dvbstream/TELNET/xfm.sh
 cvs checkout: Updating dvbstream/mpegtools
 U dvbstream/mpegtools/ctools.c
 U dvbstream/mpegtools/ctools.h
 U dvbstream/mpegtools/remux.c
 U dvbstream/mpegtools/remux.h
 U dvbstream/mpegtools/ringbuffy.c
 U dvbstream/mpegtools/ringbuffy.h
 U dvbstream/mpegtools/transform.c
 U dvbstream/mpegtools/transform.h
 
 # cd dvbstream/
# mkdir ../DVB/
# ln -s /lib/modules/`uname -r`/build/include ../DVB/
# make

Als je de melding krijgt:

../DVB/include/linux/config.h:6:2: #error including kernel header in userspace; use the glibc headers instead!
In file included from tune.h:7,
                 from dvbstream.c:53:
dvb_defaults.h:83:2: warning: #warning No DVB-T country defined in dvb_defaults.h
dvb_defaults.h:84:2: warning: #warning defaulting to UK
dvb_defaults.h:85:2: warning: #warning Ignore this if using Satellite or Cable
dvbstream.c:892:8: warning: #warning WHAT SHOULD THE PAYLOAD TYPE BE FOR "MPEG-2 PS" ?
dvbstream.c: In function `main':
dvbstream.c:445: warning: `ttl' might be used uninitialized in this function
make: *** [dvbstream] Error 1

Wis dan de volgende file (en draai make nogmaals):

 # rm ../DVB/include/linux/config.h
Voeg een route toe voor multicast verkeer:
# sh do_route.sh

Stream nu RTL4:

# grep RTL ../../linuxtv-dvb-apps-1.1.0/util/szap/channels.conf-dvbc-caiw
RTL FM:666000000:INVERSION_AUTO:6900000:FEC_NONE:QAM_64:0:1162:1160
RTL4:658000000:INVERSION_AUTO:6900000:FEC_NONE:QAM_64:512:4012:4010
RTL5:658000000:INVERSION_AUTO:6900000:FEC_NONE:QAM_64:4021:4022:4020
RTL Television:730000000:INVERSION_AUTO:6900000:FEC_NONE:QAM_256:1031:1032:10030
# ./dvbstream -f 658000000 -s 6900000 -qam 64 512 4012 4020
dvbstream v0.6 - (C) Dave Chapman 2001-2004
Released under the GPL.
Latest version available from http://www.linuxstb.org/
Tuning to 658000000 Hz
Using DVB card "Philips TDA10021 DVB-C"
tuning DVB-C to 658000000, srate=-1689934592
Getting frontend status
Not able to lock to the signal on the given frequency
dvbstream will stop after -1 seconds (71582788 minutes)
Using 224.0.1.2:5004:2
version=2
Streaming 3 streams

DVBsnoop

DVBsnoop is een utility om DVB-streams te analyseren. Compileer dvbsnoop zo:

# wget http://mesh.dl.sourceforge.net/sourceforge/dvbsnoop/dvbsnoop-1.3.77.tar.gz
# tar zxf dvbsnoop-1.3.77.tar.gz
# cd dvbsnoop-1.3.77/
# ./configure CPPFLAGS=-I/lib/modules/2.6.10-1.9_FC2/build/include
# make
 
Reacties: herman.dtv@wateringen.net