Testing your DVB device
This page provides a few suggestions on how to test that a properly installed DVB device1 is functioning correctly. The command line steps described are also indispensable for quick setup and no frills viewing with DVB hardware under Linux.
- physically installed the device into, or attached it to, your system (refer to the manufacturer's instructions for such details) and
- installed the drivers for your hardware and have the proper modules loaded (see "How to Obtain, Build and Install V4L-DVB Device Drivers" for such details)
- Having completed such tasks, you should at least now have a /dev/dvb/adapter0/ directory. (If you have additional DVB devices installed in your system, they will be assigned an increased adapter number accordingly).
Comparison of DTV testing applications
The following table lists the main features of the different command line DTV testing utilities. For specific information on usage, have a look at its specific wiki article.
feature \ utility | dvb-apps zap | Szap-s2 | dvbtune and dvbstream from dvbtools | dvbsnoop |
download | linuxtv.org/hg/dvb-apps | http://mercurial.intuxication.org/hg/szap-s2 | http://sourceforge.net/projects/dvbtools | http://dvbsnoop.sourceforge.net |
supported delivery systems | DVB-S, DVB-C, DVB-T, ATSC | DVB-S, DVB-S2 | DVB-S, DVB-C, DVB-T | DVB-S, DVB-C, DVB-T |
comments | useful for debugging, but inappropriate for newer delivery systems. | satellite only. | outdated. | outdated, but still the most powerful tool for reading and parsing DVB tables. Hint: use another tool to tune and dvbsnoop in parallel to read data. Unfortunally, dvbsnoop misses support for newer descriptors. |
supported features |
|
|
|
|
Using dvb-apps
1. Obtain the dvb-apps package
See the LinuxTV dvb-apps article for details on how to obtain the package. The dvb-apps package contains several useful tools.
2. Scan for the channels you can receive
Refer to the (dvb)scan article for details of how to perform this step. Once familiar with the content of that article, you will recognize that this step can be summarized (in general form) by:
mkdir ~/.{a,c,s,t}zap (dvb)scan /path_to_the_initial_scan_file > ~/.{a,c,s,t}zap/channels.conf
Note that you may have both a program scan
and dvbscan
installed on your system, and only one of them may work.
3. Tune a frequency and program
Refer to the zap article for details of how to perform this step. Once familiar with the content of that article, you will recognize that this step can be summarized (in general form) by:
$ /usr/bin/{a,c,s,t}zap -r -c ~/.{a,c,s,t}zap/channels.conf "channel name"
where, respective to the type of transmission, azap is used for ATSC, czap for DVB-C, szap for DVB-S and tzap for DVB-T. Make sure you do not overlook the -r option for setting up the /dev/dvb/adapterX/dvr0 interface. Otherwise, you cannot record data from dvr0.
4. After you've tuned a frequency and program
a) You could now start up your simple TV watching application and decode the stream you have tuned.
For example, while keeping {a,c,s,t}zap running in the first console shell, open up another console and run
mplayer /dev/dvb/adapter0/dvr0 <options>
If you have more than one dvb device installed in your system, then you will have to pass the correct adaptor number. See the MPlayer article for some further information, as well as the MPlayer man page (i.e. in a console run "man mplayer") for a lengthy list of options.
b) Or, you could now start up a datastreamer
c) Or, alternatively, you may want to see some statistics of what's coming in for each channel and PID.
Example:
$ /usr/bin/dvbtraffic
dvbtraffic which will access the /dev/dvb/adapter0/dvr0 logical device. An example of output from dvbtraffic is:
0000 24 p/s 4 kb/s 37 kbit 0010 20 p/s 3 kb/s 31 kbit 0011 20 p/s 3 kb/s 31 kbit 0012 70 p/s 12 kb/s 106 kbit 0015 1 p/s 0 kb/s 2 kbit 0080 26 p/s 4 kb/s 40 kbit 0082 26 p/s 4 kb/s 40 kbit 0087 25 p/s 4 kb/s 38 kbit 0100 25 p/s 4 kb/s 38 kbit 0101 25 p/s 4 kb/s 38 kbit 0102 24 p/s 4 kb/s 37 kbit 0200 8567 p/s 1572 kb/s 12885 kbit <--- 0201 4708 p/s 864 kb/s 7081 kbit 0205 926 p/s 170 kb/s 1392 kbit 0240 49 p/s 8 kb/s 75 kbit 0241 49 p/s 8 kb/s 75 kbit 028b 261 p/s 47 kb/s 393 kbit <--- 0294 174 p/s 31 kb/s 262 kbit 0295 130 p/s 23 kb/s 196 kbit 02bc 75 p/s 13 kb/s 113 kbit 1fff 87 p/s 15 kb/s 131 kbit 2000 15329 p/s 2814 kb/s 23055 kbit -PID--FREQ-----BANDWIDTH-BANDWIDTH-
In this case, for the frequency that has been tuned, PID 0x0200 is for the video stream of an HDTV channel and PID 0x028b is for the associated audio stream (both of these have been highlighted in red in the above output for easier visual identification). These PID values presented by dvbtraffuc are in hexadecimal form and need to be converted to their decimal representation (respectively, 512 and 651) for use in a channel.conf file.
This is the line you would create in the file "channel.conf" given the PID values from the dvbtraffic output shown above:
Nine High Def Gold Coast:746625000:INVERSION_AUTO:BANDWIDTH_7_MHZ:FEC_3_4:FEC_3_4:QAM_64:TRANSMISSION_MODE_8K:GUARD_INTERVAL_1_16:HIERARCHY_NONE:512:651:1138
And finally
dvbdate
Using dvbsnoop
If the testing steps in the dvb-apps section above work fine, you can jump over this section here. On the other hand, dvbsnoop is a small, down-to-earth utility that is very handy for debugging and also seeing what is occuring with a dvb device (i.e. tuning works? data coming in? signal strong enough?).
1. Obtain the dvbsnoop package
See the dvbsnoop article for details on how to obtain the package.
2. Testing with dvbsnoop
Try things like
dvbsnoop -help dvbsnoop -s pidscan
This will give out a lot of numbers, but if you understand the system of DVB you should see if they make sense. Go for one of the PIDs (choose a right one which is a bit difficult as you don't know what they stand for unless you used the scan line above) and try:
dvbsnoop -s bandwidth <PID> dvbsnoop <PID>
The latter will spit out a lot of hexdumps - at least you receive something ;-)
Save a TV program to your hard drive
The handy thing about digital TV is, it comes in as a digital stream that you can save right away to your harddisk without any changes necessary to it. Therefore, hardly any CPU resources are needed -- just a lot of HD space (few GB per hour as the stream is MPEG-2 which is not as compressed as, for example, DivX/MPEG-4; it's even more as mostly one transport stream contains multiple PIDs). There are several ways to do this. For example:
a) Using the combination of {a,c,s,t}zap and cat'ing the logical dvr device to save a program stream to disk
If you have a channel tuned with {a,c,s,t}zap (and note that you MUST also be using the -r parameter to set up the logical dvr device in order for the following to work; see Zap for detail), open up another shell console and run (as root user):
cat /dev/dvb/adapter0/dvr0 > <filename>
The result is that particular program stream will be written to disk, and you should be able to play it back at any later time with your favourite media player.
b) Using the combination of {a,c,s,t}zap and test_dvr to save an entire transport stream to disk
c) Saving to disk with dvbstream
dvbstream is a useful program that, amongst other things, can save a DVB stream to disk.
Method 1: First tune into a channel, as described above in the zapping step, and then next have dvbstream save a particular stream to file. For example:
tzap 'BBC ONE' dvbstream 600 601 -o > bbc1.mpeg
The values "600 and 601" are, respectively, the video and audio PIDs for the channel BBC ONE, as derived from the channels.conf file. So this is why it's important that you have your personal channels.conf file with all the PIDs so you can look them up.
Method 2: Alternatively, instead of using a combination of *zap and dvbstream, you can use dvbstream alone provided you pass which frequency to tune and list the correct PIDs. For example:
dvbstream -f 578000 600 601 -o >bbc1.mpeg
Wait a few seconds and then press Ctrl+C to stop. You should then be able to open/playback the recorded file with any of your favourite media players (like Mplayer, (g)xine, noatune, etc. etc ) provided you have the correct decoders installed on your system (which, in general regards to DVB transmissions, are usually going to be MPEG-2, but can now also be MPEG-4).
If the file is rather small, e.g. smaller than 1 MB after a minute of recording, then you can't receive this TV channel - maybe the reception is bad (too weak antenna signal) - or maybe your card's frequency is not tuned for the right sender? Watch out, some PIDs come up a few times (but for different frequencies).
This might not be what you wanna do every day (unless you only watch BBC1 or you can easily memorise all your channels with their two PIDs) - but it's very fast and easy to do these steps for testing purposes.
Next steps - More feature rich viewing software
It is not the intention of this page to provide a detailed description of the use of DVB hardware with more complex Linux viewing software applications. Suffice it to say that you will have some choice. For example:
- for light TV watching with a DVB device under Linux, MPlayer, Xine, Kaffeine, Klear and a few others are often selected.
- alternatively, for "Media Center" type applications, the usual first suspects are Freevo, MythTV, and VDR, but there are others as well
- you could use the streaming facilities of dvbstream, Mumudvb, dvblast, etc... and then watch the MPEG-2 stream (even possible on a different computer) with programs like Xine, MPlayer etc.
For some further inspiration on what's possible with more advanced software usage see:
- the TV Related Software page, a commented software list, and
- Example setups
(note: you'll need to install the VDR Software Decoder Plugin if you want to use VDR for watching with a software decoding card).
- Digital Video Broadcasting – A practical guide by Hugo Mills [1]