From LinuxTVWiki
Jump to: navigation, search

scan is one of the command line utilities contained in the LinuxTV dvb-apps. It scans specific frequencies for programs that can be received and generates a channel list.

Note: Depending on where/how you got the dvb-apps package, the program may be called either 'scan', 'scandvb' or 'dvbscan'. In the following examples, we'll use the name dvbscan.


dvbscan does not have a man page. However, if you run it with the -h parameter, the output provides a summary of its command options. For example, running dvbscan -h produces:

usage: dvbscan <options> as follows:
-h                     help
-adapter <id>          adapter to use (default 0)
-frontend <id> frontend to use (default 0)
-demux <id>            demux to use (default 0)
-secfile <filename>    Optional sec.conf file.
-secid <secid> ID of the SEC configuration to use, one of:
                        * UNIVERSAL (default) - Europe, 10800 to 11800 MHz and 11600 to 12700 Mhz,
                                                Dual LO, loband 9750, hiband 10600 MHz.
                        * DBS - Expressvu, North America, 12200 to 12700 MHz, Single LO, 11250 MHz.
                        * STANDARD - 10945 to 11450 Mhz, Single LO, 10000 Mhz.
                        * ENHANCED - Astra, 10700 to 11700 MHz, Single LO, 9750 MHz.
                        * C-BAND - Big Dish, 3700 to 4200 MHz, Single LO, 5150 Mhz.
                        * C-MULTI - Big Dish - Multipoint LNBf, 3700 to 4200 MHz,
                                               Dual LO, H:5150MHz, V:5750MHz.
                        * One of the sec definitions from the secfile if supplied
-satpos <position>     Specify DISEQC switch position for DVB-S.
-inversion <on|off|auto> Specify inversion (default: auto).
-uk-ordering           Use UK DVB-T channel ordering if present.
-timeout <secs>        Specify filter timeout to use (standard specced values will be used by default)
-filter <filter>       Specify service filter, a comma seperated list of the following tokens:
                        (If no filter is supplied, all services will be output)
                        * tv - Output TV channels
                        * radio - Output radio channels
                        * other - Output other channels
                        * encrypted - Output encrypted channels
-out raw <filename>|-   Output in raw format to <filename> or stdout
     channels <filename>|-  Output in channels.conf format to <filename> or stdout.
     vdr12 <filename>|- Output in vdr 1.2.x format to <filename> or stdout.
     vdr13 <filename>|- Output in vdr 1.3.x format to <filename> or stdout.
<initial scan file>

Most experts or experienced users will likely find that this information conveys sufficient details in so far as how to manipulate a specific DVB hardware device with dvbscan. 'New users', however, are probably left scratching their heads by some of the options listed in the output -- but fear not!

One thing that is noteworthy from the output above is that dvbscan does not take file system device names; instead, it cobbles them together from the adaptor, frontend and demux numbers. If you only have one tuner, you don't need to worry about this detail.

The initial channel file

In order for dvbscan to search for channels that you can receive, you must provide the name of an initial channel frequency file in the dvbscan command line. The initial channel frequency file provides a frequency that dvbscan uses as a starting point from which to proceed with its scan. These initial channel frequency files are specific to your geographic location. Initial channel information files for many localities are supplied with the LinuxTV dvb-apps package. The exact location where these files are installed may vary. In the following examples, the directory is /usr/share/doc/dvb-utils/examples/scan/dvb-t/; other installations may use /usr/share/doc/dvb-apps, /usr/local/share/dvb/scan/dvb-t/, /usr/share/dvb/dvb-t/au-Adelaide ....

In each case, the file you're looking for is contained in the folder for the type of DVB device your using. DVB-T users, for example, should find a initial channel file from /usr/share/doc/dvb-utils/examples/scan/dvb-t/ ... or, depending on the installation of the package, in /usr/share/doc/dvb-apps or /usr/local/share/dvb/scan/dvb-t/ .... Second, 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 (/usr/local/share/dvb/zap/dvb-t/au-Adelaide); in Oxford, UK you would use uk-Oxford (usr/share/dvb/dvb-t/uk-Oxford).

Scanning for channels you can receive

Run dvbscan with a initial channel file, relevant to your locality, specified in the command. Some examples:


$ dvbscan /usr/local/share/dvb/scan/dvb-t/au-Adelaide 
 scan /usr/share/doc/dvb-utils/examples/scan/dvb-t/uk-Oxford 


 $ /usr/bin/scan /usr/share/dvb-apps/atsc/us-ATSC-center-frequencies-8VSB

For North American cable-tv

 $ /usr/bin/scan /usr/share/dvb-apps/atsc/us-Cable-Standard-center-frequencies-QAM256 

Obviously, you will have to adopt this command for your own situation/locality.

In any regard, dvbscan will try to find programs on frequencies it takes from the initial channel file (e.g. uk-Oxford etc or whatever your place is). This will produce a lot of output data in the shell. This information tells you what hardware and channels dvbscan is detecting. There are often many lines of transponder information. Here are some examples:

$ dvbscan /usr/local/share/dvb/scan/dvb-t/au-Adelaide 
scanning /usr/local/share/dvb/scan/dvb-t/au-Adelaide
using '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0'
initial transponder 226500000 1 3 9 3 1 1 0
0x0000 0x0250: pmt_pid 0x0102 ABC -- ABC HDTV (running)
0x0000 0x0251: pmt_pid 0x0100 ABC -- ABC TV Adelaide (running)
0x0000 0x0257: pmt_pid 0x0106 ABC -- ABC DiG Jazz (running)
Network Name 'ABC Adelaide'

This is the tuning information for the first transponder. Each transponder can transmit multiple programs. The last one is a radio program, which you can see from the output later on.

It will take a while for scan to search through all the frequencies listed in those initial files, but it will output its progress in the shell. Note that the screen output you get into your shell doesn't really say if you can receive something. On the other hand, if a signal was not found on a particular frequency, you will notice that the output produces "WARNING: >>> tuning failed!!!". Do not be alarmed by such tuning failed messages.

During scanning, you may see error messages like:

WARNING: >>> tuning failed!!!

This is not fatal. It's possible that the scan files contain information about stations that are not yet, or no longer, in service. Check the output at the end to see whether you have all the advertised programmes.

This should produce output saying "WARNING: >>> tuning failed!!!" if a signal was not found on that particular frequency. Eventually, a list of services found should be displayed.

Case: no services

If you see only tuning failed!!! messages, it means you don't have strong enough signal. Check your antenna, cable (maybe it's not plugged at all, hopefully ;-)

Case: Services found

Eventually, upon scan completion, a list of services found should be displayed. Here is a sample list for an ATSC scan:

 dumping lists (7 services)

For a DVB-T scan, the output might look like this:


which says that the channel BBC ONE is found on frequency 578000000 Hz, and has has the two PIDs 600 and 601 for the video and audio stream.

At the end, dvbscan outputs a list of channels corresponding to what it has found, for example:


This is a "colon-separated" file. It consists of a number of fields delimited by colons. Here's the meaning of the three lines shown above:

channels.conf format
Field First programme Second programme Third programme
Programme name ABC HDTV ABC DiG Jazz TEN Digital
Frequency (Hz) 226500000 226500000 219500000
FEC name, HP FEC_3_4 FEC_3_4 FEC_3_4
FEC name, LP FEC_3_4 FEC_3_4 FEC_1_2
Constellation QAM_64 QAM_64 QAM_64
Video pid 2314 0 512
Audio pid 0 2318 650
Service ID 592 599 1617

These fields vary depending on the type of modulation; the ones shown are for QFDM (and, paradoxically, not for QAM). For other forms of modulation, the meanings of the fields differ. See the source code (and document it, please!) at util/scan/dump-zap.c.

Looking at the values, it's clear that ABC DiG Jazz is a radio programme, since it doesn't have a video pid. Less clear is why ABC HDTV does not have an audio pid. This is a real issue: this means that when tuning to these streams, no audio is output. We'll look at how to solve this problem below.

The frequencies shown here are in Hz. They correspond to 226.5 MHz for ABC and 219.5 MHz for TEN. Note that the first two programmes are the same frequency, so they come in the same MPEG stream. They're distinguished by the pids.


  • If a channel has a video PID of 0 and and audio PID is not 0, then it's probably a radio channel.
  • if dvbscan detected a channel but the signal was too weak for reliable reception, the video and audio PIDs (third and second last number in the output line) will likely be shown as 0

Creating a channels.conf file

Next create a "channels.conf" file. This file takes the data for your available TV-channels, as shown above, and stores it for tuning use by simple "zapper" programs, such as tzap, or for higher level applications like MPlayer or Xine.

Each of the "zapper" utilities will, by default, expect to find the channels.conf file in the specific hidden (dotted) directory off your "home" directory. For example, for DVB-C tuning with czap, you would set up a ~/.czap directory. Likewise, for use with szap, you would make a ~/.szap directory, and so forth. Here are some examples of how to automagically create the channels.conf file by directing the stdout from the dvbscan command to be placed in a file in a given directory:

For DVB-T:

 mkdir ~/.tzap
 scan /usr/share/doc/dvb-utils/examples/scan/dvb-t/uk-Oxford > /.tzap/channels.conf
 mkdir ~/.tzap
 dvbscan /usr/local/share/dvb/scan/dvb-t/au-Adelaide > .tzap/channels.conf


 $ mkdir ~/.azap
 $ scandvb /usr/share/dvb-apps/atsc/us-ATSC-center-frequencies-8VSB > ~/.azap/channels.conf

You may wish to display the contents of the channels.conf file to make sure the file creation proceeded correctly. You can do so by opening it in your favourite text editor or via

 $ cat ~/.azap/channels.conf


  • manual creation of channels config (copy and paste dvbscan output into text editor, name file channels.conf, place file in appropriate location(s)
  • one step scan and channels.conf creation (i.e if you were paying attention, don't need to run dvbscan twice as was like performed above)
  • ~/.{a,c,s,t}zap directories for the channels.conf is just the default location. Each of the zapper utilities can use any other location for channels.conf provided you specify its location ... (i.e. ~/. is really just a ease of use) ... see the zap articles for more usage detail
  • the dvb-apps package contains a number of files that are essentially channels.conf files for given localities. These will probably be installed on you system. For example, /usr/local/share/dvb/zap/dvb-t/au-Adelaide is a canned version of the output of dvbscan. It may be out of date, so it's better to generate it from dvbscan, but if you can't get dvbscan to work, you might get further by using this file.

A word about dvbscan and audio streams

scan does not always seem to correctly recognize audio streams for a television channel.

Example, in Australia, most channels broadcast HDTV with AC3 audio, which scan does not recognize when invoked as above. The result is the output shown above for ABC HDTV: no audio.

This is almost certainly a bug in scan. Until it is fixed, you can proceed in the following way:

  • Create the channels.conf file as shown above.
  • Run tzap to tune to the stream:
$ tzap -S "ABC HDTV" &

The -S ("silent") option tells tzap not to output its usual signal quality information; the & tells the shell to issue a new prompt when it has started tzap.

Next, run dvbscan with the -c (scan on currently tuned transponder only) option:

$ dvbscan -c
using '/dev/dvb/adapter0/frontend0' and '/dev/dvb/adapter0/demux0'
0x0000 0x0250: pmt_pid 0x0102 ABC -- ABC HDTV (running)
0x0000 0x0251: pmt_pid 0x0100 ABC -- ABC TV Adelaide (running)
dumping lists (6 services)
ABC HDTV         (0x0250) 01: PCR 0x0905 V 0x090a TT 0x090c AC3 0x090b
ABC TV Adelaide  (0x0251) 01: PCR 0x0080 V 0x0200 A 0x028a (eng) TT 0x0240 AC3 0x0294

This output was limited to the interesting information. The last two lines show the output for ABC HDTV and ABC TV Adelaide. ABC TV Adelaide has a video pid 0x200, an audio pid 0x28a, and an AC3 pid 0x294. The meanings of the other values still need to be documented.

By contrast, ABC HDTV has a video pid 0x90a, and AC3 pid 0x90b--and no audio pid. This is the problem. In the output from scan based on the transmitter data, the corresponding values are (leaving out the middle of the lines, which aren't of interest here):

ABC HDTV: ... :2314:0:592
ABC TV Adelaide: ... :512:650:593

As described above, the third-last value is the video pid, and the second-last value is the audio pid. In this output they're in decimal, while in the output of dvbscan -c they're in hexadecimal; but they correspond.

To work around the lack of audio pid in ABC HDTV, convert the value of the AC3 pid (0x90b) to decimal (2315) and edit the channels.conf file:

ABC HDTV: ... :2314:2315:592

Also See