Testing your DVB device

From LinuxTVWiki
Revision as of 03:26, 20 August 2006 by Damien (talk | contribs) (Added WikiLink to PID)
Jump to navigation Jump to search

First steps with a budget DVB card in Linux - Getting Started Howto

This page gives you some suggestions how to test your DVB card installed on your system. It won't tell you greatly featured software to watch TV, neither how to install your specific hardware that you have (see the other pages of this wiki for that). But it will tell you software that will run in command-line mode (shell only, actually) and even on very modest software. And it won't take long to do these tests here.

Run all stuff on this page as root, for the beginning. Here, we assume you already installed the driver for your hardware and loaded the modules, i.e. you should have a non empty directory

 /dev/dvb/adapter0/

This article assumes an installed card with loaded drivers. For installing the DVB device (hardware and modules) on the sytem you can look at: HOW TO Install DVB Device

(Note: All these tests also work with a full featured card as they can do the stuff that budget cards can do. They work only for DVB cards, not for analog TV cards.)

First steps using DVBtools

The dvb-utils have many useful tools with great functionality. Install it, e.g. with debian:

 # apt-get install dvb-utils

The first step is to scan for the channels you can receive. Depending on where you get your dvb-utils package, the program to use is called 'scan' or 'dvbscan'. In the following examples, we'll use the name 'scan'.

You also need to find channel information for your locality. Again, the location where they are installed may vary. In the following examples, the directory is /usr/share/doc/dvb-utils/eamples/scan/dvb-t/; other installations also use /usr/local/share/dvb/scan/dvb-t/. In each case, the name of the file you're looking for is of the form cc-Ttttt, where cc is a two-letter country abbreviation, and Ttttt is the name of the location of the transmitter. So in Adelaide, Australia, you'd look for a file called au-Adelaide; the following example relates to Oxford in the United Kingdom.

For the beginning, do something like this: Adopt this line for your place

 scan /usr/share/doc/dvb-utils/examples/scan/dvb-t/uk-Oxford 

and you'll see what's coming in to the card. If that makes sense, repeat it like this:

 mkdir /root/.tzap
 scan /usr/share/doc/dvb-utils/examples/scan/dvb-t/uk-Oxford \
    > /root/.tzap/channels.conf

This tries to find the programs it takes from the initial uk-Oxford configuration (or whatever your place is). Note that the screen output you get into your shell doesn't really say if you can recieve something or not. The file it creates is more important; it has lines like:

 BBC ONE:578000000:INVERSION_AUTO:BANDWIDTH_8_MHZ:FEC_3_4:FEC_3_4:QAM_16:TRANSMISSION_MODE_2K:GUARD_INTERVAL_1_32:HIERARCHY_NONE:600:601:4171

which says that the stream on frequency 578000000 Hz has the two PIDs 600 and 601 for the video and audio stream of BBC ONE. This file with the data for your TV-programs, if stored into the place as above, can be used by the zapper tzap, e.g.:

 tzap Bloomberg -- Bloomberg

That tunes automatically both channel and PIDs for video and audio to the channel called "Bloomberg -- Bloomberg". Use the command tzap for DVB-T. For DVB-C, replace tzap with czap and for DVB-S with szap. The output of tzap is something like

 using '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0'
 tuning to 778000000 Hz
 video pid 0x040f, audio pid 0x040e
 status 1f | signal 5100 | snr 6200 | ber 00000000 | unc 00000000 | FE_HAS_LOCK
 status 1f | signal 5100 | snr 6200 | ber 00000000 | unc 00000000 | FE_HAS_LOCK
 status 1f | signal 5100 | snr 6200 | ber 00000000 | unc 00000000 | FE_HAS_LOCK#
 ...
 (end it with Ctrl C)

Not all the numbers are implemented in some drivers, but good is signal > 8000, status 1f (all bits set), snr (Signal to Noise Ratio) should be > 8000, ber (bit error rate) - low is good, unc (Uncorrectable blocks) - low is good.

You could now start up your TV watching application or datastreamer. But we want to see some nice statistics of what's coming in for each channel and PID:

 dvbtraffic

And finally

 dvbdata

Note: if your signal is too weak and you recieve only some channels, the way to find out which is to look in the channel.conf file that you just created. If for a program the two PIDs (third and second last number in line) are 0, you can't recieve it. If the first PID is 0 and the second is not 0, then it's probably a radio channel.

First steps using dvbsnoop

As an alternative, dvbsnoop is a small, down-to-earth util. As it's very hardware-near, it's very handy for debugging and seeing what's going on with the card (tuning works? data coming in? signal strong enough?). (On the other side, if all in the section above works fine, you can jump over this section here.) Install it, e.g. with debian:

 # apt-get install dvbsnoop

Then 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 recieve something ;-)


Save a TV program to harddisk with dvbstream

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). A good program that can do that (and more) is dvbstream.

Install it, e.g. with debian:

 # apt-get install dvbstream

Let's tune into a channel with tzap as described above, and then you can just save the stream into a file like this:

 tzap BBC ONE
 dvbstream 600 601 -o >BBC1.mpeg

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. Instead of using tzap you can do it all in one - tune the frequency and select the right PIDs:

 dvbstream -f 578000 600 601 -o >bbc1.mpeg

Wait a few seconds and then press Ctrl+C to stop. You can open the MPEG file with players that play movie files (decode MPEG2), like mplayer, (g)xine or noatune.

If the file is rather small, e.g. smaller than 1 MB after a minute of recording, then you can't recieve 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, e.g. for a test.


More Software - next steps

You have a lot of choice. Obviously, don't use analog-TV or full-featured-cards software but use budget-DVB-software. Don't get yourself confused that bttv was analog-TV first - it's come a long way and now the form you use is DVB. So xawtv for example will not work -- you just don't have /dev/video0 (instead you have /dev/dvb/adapter0).

Xine and VDR probably are the first choice for a DVB card. Keep in mind, the TwinhanDTV Ter is is a budget card, not a Full-featured Card so you have to install the VDR Software Decoder Plugin if you wanna use VDR for watching (good luck). Xine will work right away.

Alternatively, you could use dvbstream and then watch the MPEG-2 stream (even possible on a different computer) with programs like xine, mplayer etc.

See the example setups to be inspired what's possible.

See also