Some very frequently asked questions about linuxtv-dvb

1. The signal seems to die a few seconds after tuning.

	It's not a bug, it's a feature. Because the frontends have
	significant power requirements (and hence get very hot), they
	are powered down if they are unused (i.e. if the frontend device
	is closed). The dvb-core.o module paramter "dvb_shutdown_timeout"
	allow you to change the timeout (default 5 seconds). Setting the
	timeout to 0 disables the timeout feature.

2. How can I watch TV?

	The driver distribution includes some simple utilities which
	are mainly intended for testing and to demonstrate how the
	DVB API works.

	Depending on whether you have a DVB-S, DVB-C or DVB-T card, use
	apps/szap/szap, czap or tzap. You must supply a channel list
	in ~/.[sct]zap/channels.conf. If you are lucky you can just copy
	one of the supplied channel lists, or you can create a new one
	by running apps/scan/scan. If you run scan on an unknown network
	you might have to supply some start data in apps/scan/initial.h.

	If you have a card with a built-in hardware MPEG-decoder the
	drivers create a video4linux device (/dev/v4l/video0) which
	you can use to watch TV with any v4l application. xawtv is known
	to work. Note that you cannot change channels with xawtv, you
	have to zap using [sct]zap. If you want a nice application for
	TV watching and record/playback, have a look at VDR.

	If your card does not have a hardware MPEG decoder you need
	a software MPEG decoder. Mplayer or xine are known to work.
	Newsflash: MythTV also has DVB support now.
	Note: Only very recent versions of Mplayer and xine can decode.
	MPEG2 transport streams (TS) directly. Then, run
	'[sct]zap channelname -r' in one xterm, and keep it running,
	and start 'mplayer - < /dev/dvb/adapter0/dvr0' or
	'xine stdin://mpeg2 < /dev/dvb/adapter0/dvr0' in a second xterm.
	That's all far from perfect, but it seems no one has written
	a nice DVB application which includes a builtin software MPEG
	decoder yet.

	Newsflash: Newest xine directly supports DVB. Just copy your
	channels.conf to ~/.xine and start 'xine dvb://', or select
	the DVB button in the xine GUI. Channel switching works using the
	numpad pgup/pgdown (NP9 / NP3) keys to scroll through the channel osd
	menu and pressing numpad-enter to switch to the selected channel.

	Note: Older versions of xine and mplayer understand MPEG program
	streams (PS) only, and can be used in conjunction with the
	ts2ps tool from the Metzler Brother's dvb-mpegtools package.

3. Which other DVB applications exist?

	http://www.cadsoft.de/people/kls/vdr/
		Klaus Schmidinger's Video Disk Recorder

	http://www.metzlerbros.org/dvb/
		Metzler Bros. DVB development; alternate drivers and
		DVB utilities, include dvb-mpegtools and tuxzap.

	http://www.linuxstb.org/
	http://sourceforge.net/projects/dvbtools/
		Dave Chapman's dvbtools package, including
		dvbstream and dvbtune

	http://www.linuxdvb.tv/
		Henning Holtschneider's site with many interesting
		links and docs

	http://www.dbox2.info/
		LinuxDVB on the dBox2

	http://www.tuxbox.org/
	http://cvs.tuxbox.org/
		the TuxBox CVS many interesting DVB applications and the dBox2
		DVB source

	http://sourceforge.net/projects/dvbsak/
		DVB Swiss Army Knife library and utilities

	http://www.nenie.org/misc/mpsys/
		MPSYS: a MPEG2 system library and tools

	http://mplayerhq.hu/
		mplayer

	http://xine.sourceforge.net/
	http://xinehq.de/
		xine

	http://www.mythtv.org/
		MythTV - analog TV PVR, but now with DVB support, too
		(with software MPEG decode)

	http://dvbsnoop.sourceforge.net/
		DVB sniffer program to monitor, analyze, debug, dump
		or view dvb/mpeg/dsm-cc/mhp stream information (TS,
		PES, SECTION)

4. Can't get a signal tuned correctly

	If you are using a Technotrend/Hauppauge DVB-C card *without* analog
	module, you might have to use module parameter adac=-1 (dvb-ttpci.o).

5. The dvb_net device doesn't give me any packets at all

	Run tcpdump on the dvb0_0 interface. This sets the interface
	into promiscous mode so it accepts any packets from the PID
	you have configured with the dvbnet utility. Check if there
	are any packets with the IP addr and MAC addr you have
	configured with ifconfig.

	If tcpdump doesn't give you any output, check the statistics
	which ifconfig outputs. (Note: If the MAC address is wrong,
	dvb_net won't get any input; thus you have to run tcpdump
	before checking the statistics.) If there are no packets at
	all then maybe the PID is wrong. If there are error packets,
	then either the PID is wrong or the stream does not conform to
	the MPE standard (EN 301 192, http://www.etsi.org/). You can
	use e.g. dvbsnoop for debugging.

6. The dvb_net device doesn't give me any multicast packets

	Check your routes if they include the multicast address range.
	Additionally make sure that "source validation by reversed path
	lookup" is disabled:
	  $ "echo 0 > /proc/sys/net/ipv4/conf/dvb0/rp_filter"

7. What the hell are all those modules that need to be loaded?

	For a dvb-ttpci av7110 based full-featured card the following
	modules are loaded:

	- videodev: Video4Linux core module. This is the base module that
	  gives you access to the "analog" tv picture of the av7110 mpeg2
	  decoder.

	- v4l2-common: common functions for Video4Linux-2 drivers

	- v4l1-compat: backward compatiblity layer for Video4Linux-1 legacy
	  applications

	- dvb-core: DVB core module. This provides you with the
	  /dev/dvb/adapter entries

	- saa7146: SAA7146 core driver. This is need to access any SAA7146
	  based card in your system.

	- saa7146_vv: SAA7146 video and vbi functions. These are only needed
	  for full-featured cards.

	- video-buf: capture helper module for the saa7146_vv driver. This
	  one is responsible to handle capture buffers.

	- dvb-ttpci: The main driver for AV7110 based, full-featued
	  DVB-S/C/T cards

eof
