Linux 2000 DVB T Experiments

background image

Home
° FAQ Page
° About Linux2000
° Linux2000@Home
° Visitors Comments

Family Pages

Aviation Stuff
° PPL Diary Page

Software Development
° PythonCard Toolkit
° PIMP Project Page
° standaloneBuilder Tool
° PySSHed Project Page
° Shorter Python Scripts
° Shell Scripts

General Linux Stuff
° Web Authoring
° Linux VPN
° Digital TV on Linux

Spacewatch
° Columbia Lost
° Linux Software
° STSPLUS On Linux

Linux and Digital TV

Normal service will be resumed shortly

I've recently been playing around with recording TV shows under Linux and
converting the saved video to XViD format so I can watch it later using the
TV-Out function on my laptop. It took a while to get to grips with all the new
technology involved, so I thought it would be useful to document my efforts
here.

TV Broadcasting for Dummies

Bearing in mind that apart from my amateur radio licence, (which expired many
more years ago than I care to admit!) I have no qualifications in the field of
electronics,

click here

for a potted explanation of how analog and digital TV

works. Hopefully it's not too far from the truth, but best take it with a small
pinch of salt just to be on the safe side... :-)

DVB Standards

There are several excellent resource on the Internet for anyone who wants a
detailed technical explanation of how Digital Video Broadcasting, or DVB, works.
In a nutshell, there are 3 main standards. Regular satellite TV (DVB-S), cable TV
(DVB-C) and digital terrestrial TV, known as DVB-T. It is only DVB-T that I'm
conerned with here. Some of the stuff on re-encoding to XViD may still apply,
but I would recommend you carry on Googling!

DVB-T Hardware

There are a whole bunch of different DVB-T add-on cards and devices which
have very good Linux support. Finding one which suits your needs will be an
entirely personal thing, so I won't attempt to cover that in this article. Suffice it
to say that you'll need to do the usual research to establish that any hardware
you plan to purchase will work with your chosen distro.

Based on the
success that a
work colleague
reported,

I

invested a small
amount

of

money in a
Freecom DVB-T
USB stick. This
device is a
'budget' DVB-T
receiver. This
means that it
relies

on

external
software to do
the job of

decoding the MPEG data stream and selecting the required PIDs. It comes with
a reasonably effective miniature antenna and a remote control which I haven't
bothered to try and do anything with in Linux. The picture over there shows
what it all looks like.

I quickly discovered that the kernel on my laptop was too out of date to be able
to support the Freecom device. To be fair, the kernel was able to support the
rev1 and rev2 versions, but the one I bought turned out to be a newer rev3
device. This kind of thing is common with proprietary hardware - the
manufacturer will start producing a new version under the same brand name,
but using different hardware internally. The USB id for this thing is 14aa-0225
for the benefit of Googles web spider! I put myself through the pain of updating
the Linux install on my laptop to begin with, as I needed a kernel revision of
2.6.13 or higher in order to be able to make it work. I installed Mandriva 2007,
which replaced my previous Mandrake 2005LE installation which I'd had in place
for some time. There was a fair bit of tedious hacking around to get everything
working properly,

click here

for the full story.

Linux user

#287730

Linux 2000 : DVB-T Experiments

http://www.linux2000.org/dvb.html

1 z 4

2010-05-06 22:21

background image

Setup for Other Applications

By this point, your DVB stick works using kaffeine, the media player which is
commonly bundled with KDE. If that's all you ever want to do, you can stop
here. For more advanced stuff, read on...

The next step is to generate a channel list in a format which is compatible with
other DVB-aware applications such as mplayer and xine. You should already
know the name of your local TV transmitter, having used this information to get
kaffeine working. What you now need is a list of the UHF frequencies that your
local transmitter uses. Happily, KDE already provides this information for you.
Take a peek into:

/home/yourusername/.kde/share/apps/kaffeine/dvb-t

You will see a bunch of files in there, some of which start with the prefix

uk

. In

my case, I live near the Whitehawk Hill transmitter in Brighton. The file I used
was therefore:

/home/yourusername/.kde/share/apps/kaffeine/dvb-t/uk-WhitehawkHill

For the truly bored, the contents of the file look something like this:

# Whitehawk Hill, East Sussex (Brighton)
# T freq bw fec_hi fec_lo mod transmission-mode guard-interval hierarchy
# multiplex B BBC - Channel 48
T 690000000 8MHz 3/4 NONE QAM16 2k 1/32 NONE
# multiplex 2 Digital 3&4 - Channel 50
T 706000000 8MHz 3/4 NONE QAM64 2k 1/32 NONE
# multiplex A SDN - Channel 55
T 746000000 8MHz 3/4 NONE QAM64 2k 1/32 NONE
# multiplex C Crown Castle - Channel 58
T 770000000 8MHz 3/4 NONE QAM16 2k 1/32 NONE
# multiplex D Crown Castle - Channel 61
T 794000000 8MHz 3/4 NONE QAM16 2k 1/32 NONE
# multiplex 1 BBC - Channel 66
T 834000000 8MHz 3/4 NONE QAM16 2k 1/32 NONE

You need to get your DVB device to tune each of these frequencies in turn to
see what digital data streams it can find. This is done using a command line
tool,

scandvb

, which is provided as part of the

dvb-apps

RPM. The actual

commands you need to run are:

cd /home/yourusername
mkdir .tzap
cd /home/yourusername/.kde/share/apps/kaffeine/dvb-t
scandvb uk-WhitehawkHill > /home/yourusername/.tzap/channels.conf

This will take a few minutes and you will end up with a file containing all the
digital data streams that could be found. Note that I deliberately used the
phrase

digital data streams

- this is because the file you just generated also

contains details of any audio-only services that were found. You can safely edit
these out of the

channels.conf

file using your favourite text editor.

There is one other slight wrinkle we need to take care of...this being the UK,
nothing is ever simple. The range of digital channels being broadcast actually
changes at various times during the day, most notably at 6:00pm when the
childrens channels go off the air and again at 7:00pm when (for example) BBC3
starts broadcasting. There may be a way to get the Freecom to detect this, but
the only solution I was able to come up with was to run several seperate
channel scans at different times of day and combine the resulting channels.conf
files into a single master list. Tedious in the extreme, but there you go...

In order to finally make everything work with xine and mplayer, you need to
either copy or symlink your master channels.conf file into the relevant config
directories. For example, I keep my master channels list in:

/home/phile/dvb/channels.conf

Therefore to make this available to the other apps, I did this:

cd /home/phile
mkdir .xine
mkdir .mplayer
cd .xine
ln -s /home/phile/dvb/channels.conf
cd ../.mplayer
ln -s /home/phile/dvb/channels.conf

You should, of course, replace

/home/phile

with the path to your own home

directory.

Recording Stuff

Linux 2000 : DVB-T Experiments

http://www.linux2000.org/dvb.html

2 z 4

2010-05-06 22:21

background image

As explained earlier, DVB data streams are essentially the same as the
video/audio data you would expect to find on a standard DVD. Video DVD is a
mature and established technology platform, so I was slightly surprised to
discover that most of the normal tools you would use on Linux for dealing with
DVD-style data seem to have problems when trying to cope with digital TV. It
turns out there are a number of reasons for this:

UK DVB transmissions aren't always strictly compliant with MPEG-2
standards
Source material can have a number of different framerates and this has
to be modified to comply with the 25fps PAL TV standard, meaning
duplicate frames are sometimes added to keep audio and video in sync.
Frames are sometimes dropped for the same reason as above.
Good old fashioned interference can cause audio dropout or video
breakup, expecially on misty days with a weak TV signal.

My initial experiments were based around using

mencoder

to do the recording.

Whilst this is a superb piece of software, it's simply too clever by far for this
application. What is needed is something which can handle the job of tuning to
the required UHF channel, selecting the correct video and audio information
from amongst the many multiplexed data streams being broadcast and simply
dump this information to disk as a regular MPEG a/v file. Any other processing
which is required can be carried out at a later stage. The program required for
this is

dvbstream

, which is normally supplied as part of the DVB-tools package

on Mandriva.

As a working example, in order to record 15 minutes of whatever programme is
currently showing on BBC3, the command would be:

/usr/bin/dvbstream -f 834000 -ps 620 621 -n 900 \
-o > /home/phile/dvb/recordings/BBC3.mpeg

The various options given are as follows and all are explained in more detail if
you type

dvbstream

on its own at a shell prompt:

-f 834000

specifies the base UHF frequency in kHz that we want our DVB card to

be tuned to. Note that the normal

channels.conf

file will show this value in Hz,

so you have to remember to drop the last 3 zeroes off the end.

-ps 620 621

specifies the DBV programme ids for the video and audio stream

that we're interested in. This information will be found in your

channels.conf

file.

-n 900

sets the recording duration in seconds.

-o > /home/phile/dvb/recordings/BBC3.mpeg

specifies that

dvbstream

should

stream the data to stdout, which we then redirect to a local file.

Converting to XViD

Most digital TV broadcasts have bitrates equivalent to DVD quality. You can
reduce the bitrates quite considerably without impacting the overall quality too
much, saving yourself a ton of disk space in the process. I looked at several
different ways of doing this before settling on a fairly simple calculation which so
far has given me excellent results.

Let's take as an example a recording that I made of the Doctor Who Christmas
special in December 2006. My recording started at 19:55 and is 4200 seconds
long, i.e. 1 hour and 10 minutes. This includes a certain amount of slack time at
the start and end of the actual programme, but I'm not going to worry about
trimming this out just yet. The estimated final output size for this will be:

(4200 / 60) * 6000 = 420000

This is simply the number of minutes of recorded material multiplied by 6000 to
give a value in kbytes. The reason for picking this value will become clear if you
look at the answer given for a hypothetical 90 minute recording that needs no
trimming:

90 * 6000 = 540000

This would give a final output size which allows a normal 90 minute movie to
easily fit onto a single blank CD for archival purposes. The required

mencoder

command line to convert my Doctor Who recording to XViD is:

/usr/bin/mencoder /home/phile/dvb/recordings/drwho.mpeg -of avi \

-ovc xvid -xvidencopts bitrate=-420000:par=pal169 \
-oac mp3lame -lameopts cbr:br=128 -audio-delay -0.3 \
-vf pp=fd \
-af volnorm=1:1.10 \
-mc 0 -noskip -o /home/phile/dvb/xvid/drwho.avi

Linux 2000 : DVB-T Experiments

http://www.linux2000.org/dvb.html

3 z 4

2010-05-06 22:21

background image

As with recording, please refer to the

man

page for

mencoder

to see a full

explanation of all these options, but in summary they are:

-of avi

specifies output in AVI format.

-ovc xvid

specifies XViD as the output video codec.

-xvidencopts bitrate=-420000:par=pal169

specifies a final output size of

420Mbytes and a 16:9 (i.e. widescreen) pixel aspect ratio. Substitute the correct
size for the file you are encoding using the calculation above.

-oac mp3lame

specifies mp3lame as the audio output codec.

-lameopts cbr:br=128

sets the audio to be constant bit rate at 128kbps.

-audio-delay -0.3

delays the audo track by 0.3 seconds, which is just the right

amount to keep audio and video in sync for a UK DVB-T broadcast.

-vf pp=fd

adds a video de-interlace filter to make the output slightly smoother.

-af volnorm=1:1.10

normalizes the audio level by giving the quiet bits a very

slight boost.

-mc 0

Disable mencoders automatic attempts to re-sync audio with video.

-noskip

Do not drop duplicate frames.

-o /home/phile/dvb/xvid/drwho.avi

specifies where to save the final XViD file.

Scripting the Whole Process

I quickly got bored with trying to remember all these command line options and
other mental acrobatics, so I wrote a Python script to take care of it all for me.
To download a copy of this,

right click this link

and select

save link as...

in your

browser. Ensure you have a directory called

bin

in your home directory and save

the script there. Make it executable using the command

chmod 755

/home/yourusername/bin/dvbUtils.py

. Then run

dvbutils.py install

to set up the

required symlinks for the recording and encoding functions. Finally, you need to
run

dvbconfig

to complete the setup.

You can now run

dvbrecord

to record a programme,

dvbencode

to convert a

saved recording from MPEG to XViD format and

dvbconfig

if you wish to change

the setup. I'm working on an extension to this script which will add a

dvbschedule

command so that recordings can be scheduled in advance - please

check back to this page shortly for an update.

Simple Editing

Now that you have a saved XViD file, this is a good time to trim the beginning
and end of the recording to match the exact length of the programme. Some TV
stations will insist on inserting an all-too-frequent 'message from our sponsors'
into the middle of your favourite show, so you'll most likely want to get rid of
those as well. My experience has taught me that it's best to do the encoding to
XViD before trying to do any trimming, to avoid stuffing up the audio sync in
your final output file, hence why I've left tis part until last.

By far the best tool I've found for this job is

avidemux

- this comes in RPM

format for Mandriva 2007, you may need to do some digging to find a version
for your chosen distro.

I've done my best to ensure that the information given on this site is accurate. If you make any use of this information, however, you do so

entirely at your own risk

. If you lose your job, your house

blows up or your dog dies, it's not my fault, okay? All trademarks and copyrights are owned by their respective companies. Linux is a trademark of Linus Torvalds. HTML coding done using

Bluefish-0.7

, together with

wml-2.0.9 (18-Oct-2002)

and graphics by

The Gimp

.

Copyright © 2004 Phil Edwards mailto: webmaster (at) linux2000.com

Last updated Tue Nov 13 17:21:43 2007

Linux 2000 : DVB-T Experiments

http://www.linux2000.org/dvb.html

4 z 4

2010-05-06 22:21


Wyszukiwarka

Podobne podstrony:
2000 SZD 6 X experimental glider (1 50)
LDAP Linux How to (2000)
2000 10 Raid Controllers 15 Scsi Controllers in the Linux Labs
2000 11 Make Linux Your Future
03 2000 Revisions Overview Rev 3 1 03
EXPERIENTIAL
Natura 2000
brzuch 1999 2000
Bootowalny pendrive z systemem Linux
MAZDA B3000 2000
Poczta w systemie Linux
2000
neostrada linux id 316732 Nieznany
2000 12 03 wycena akcji, FCFF, FCFF, dźwignie finansowe, progi rentowności

więcej podobnych podstron