Televize pod Linuxem

S příchodem nových verzí jádra a hlavně nových programů se však situace začala měnit. Nás bude v této chvíli zajímat hlavně podpora technologie video4linux, která poskytuje standardní rozhraní pro komunikaci programů se vstupními audio- (např. FM rádia) a videozařízeními (např. DV, FireWire, TV karty). Velkou zásluhu na tomto počinu má Alan Cox, jeden z vývojářů jádra, který systém navrhl, pojmenoval a začal vytvářet.

 

Pro fungování multimediálních karet tedy musíme mít v jádře zakompilovanou podporu video4linux. Dále je nutný ovladač zařízení, který je s ohledem na stabilitu systému doporučováno kompilovat jako modul, a ne jako součást jádra. V mém případě šlo o TV tuner 3Daemon PV951TF s čipem BT878, výsledný modul se jmenuje bttv.o. Většina u nás prodávaných TV karet je vybavena buď právě tímto čipem, nebo jeho „příbuznými“ – čipy BT879 a BT848, které tento modul podporuje, proto by se jejich instalace měla lišit jen v maličkostech. Pozor však na typ BT828, který se používal v některých starších kartách firmy ATI, protože pro něj je nutné zvolit jiný ovladač. Pro TV karty je také důležitá sběrnice a přiřazení IRQ. Téměř hodinu jsem zkoumal, proč mi karta nekomunikuje, než mne napadlo přesunout ji do jiného PCI slotu.

Potom vše okamžitě začalo fungovat. Jestliže tedy máme odpovídající ovladače, musíme jádru sdělit, aby je načetlo s námi požadovanými parametry. Ještě před prvním pokusem o zavedení ovladačů je však třeba inicializovat modul i2c-core.o. To provedeme následujícím příkazem:

$ modprobe i2c-core

Protože jsem si nebyl všemi parametry modulu bttv zcela jistý, napsal jsem si dva jednoduché scripty: script 1 (tv_start) – načtení ovladačů tuner, bttv a tvaudio s parametry do paměti a script 2 (tv_stop) – odstranění ovladačů tuner, bttv a tvaudio z paměti.

#script 1: tv_start
#nacteni ovladacu do pameti
modprobe tuner type=5
modprobe bttv card=42 tuner=8
radio=1 pll=1
modprobe tvaudio
#script 2: tv_stop
#odstraneni ovladacu z pameti
rmmod bttv
rmmod tuner
rmmod tvaudio

Dál jsem postupoval následovně:
1. Zavedl jsem modul i2c-core příkazem modprobe i2c-core.
2. Nastavil jsem pokusné parametry do scriptu 1 (tv_start).
3. Spustil jsem script 1 (tv_start).
4. Spustil jsem program xawtv.
5. Pokud se neobjevil žádný obraz, spustil jsem script 2 (tv_stop) a opakoval postup od bodu 2.
6. Pokud se obraz objevil (i zrnitý), zapsal jsem si správnou konfiguraci a mohl jsem začít s laděním TV stanic. Do souboru /etc/modules.autoload jsem přidal správné parametry, jak ukazuje následující výpis.

# soubor /etc/modules.autoload
modprobe i2c
modprobe bttv card=42 tuner=8
radio=1 pll=1
modprobe tuner type=5
modprobe tvaudio

Ještě upozorním, že mnou testovaná TV karta má zvukový čip, který umožňuje zvuk pouze zapnout nebo vypnout, nikoli nastavovat hlasitost. Proto je nutné ve zvukovém mixéru vaší zvukové karty nastavit hlasitost pro Line in. Po správném nastavení si již můžeme vychutnávat plody naší investice.

Ke sledování televize mi nejvíce vyhovovaly dva programy, xawtv a ktv. Možnosti obou jsou téměř totožné a ovládání velice jednoduché. Další možností, která se nabízí, je ukládání vstupního signálu do videosouborů. Tu nám umožní hned několik programů, mezi nimi i xawtv, ale jeho výstup se mi nepodařilo žádným způsobem přehrát.

Další možností je program avicap. Ten je dostupný jako součást balíku avifile spolu s programem aviplay. Jak již název napovídá, aviplay je určen pro přehrávání videosouborů ve formátu AVI a avicap je určen pro grabování videa do AVI souborů.

Provedl jsem malý test, abych zjistil možnosti karty a také možnosti svého počítače. Ten již nepatří k nejrychlejším, má procesor Pentium III 700 MHz, 30GB disk Western Digital se 7200 ot./min. a 384 MB paměti. V tabulce jsou výsledky testů provedených programem avicap pro klipy o délce 30 sekund. Ve sloupci Výsledek je u nedostatečných výsledků uvedena přibližná hodnota počtu vynechaných snímků v procentech.

Kodek Rozlišení Vytížení procesoru [%] Výsledek
DivX 4 – low motion 384 × 288 (1/4 PAL) 50 OK
576 × 432 (1/2 PAL) 90 OK
768 × 576 (PAL) 100 Nestíhá CPU o 30 %
DivX 5 384 × 288 (1/4 PAL) 50 OK
576 × 432 (1/2 PAL) 100 Nestíhá CPU o 15 %
768 × 576 (PAL) 100 Nestíhá CPU o 30 %
Bez komprese 384 × 288 (1/4 PAL) 5 OK
576 × 432 (1/2 PAL) 40 Nestíhá HD o 10 %
768 × 576 (PAL) 70 Nestíhá HD o 30 %

Jak je z tabulky patrné, nejlépe dopadlo stahování v kodeku DivX 4 low motion, který jako jediný dokázal komprimovat v reálném čase i při 1/2 rozlišení PAL. Dokonce zde zůstala i minimální rezerva využití procesoru.

DivX 5 dopadl jen o něco hůř, zřejmě kvůli optimalizaci kvality komprese lehce stoupla její náročnost na procesor. Ukládání bez komprese dopadlo nejhůř, nebylo to však způsobeno nedostatečným výkonem procesoru jako v předchozích případech, ale nedostatečnou rychlostí disku. Datový objem je už příliš veliký – při rozlišení 384 x 288, frekvenci 25 snímků za sekundu a 24bitové barevné hloubce získáme nekomprimovaný tok 7,9 MB/s a při plném rozlišení je to již čtyřnásobek, tedy 31,6 MB/s.

Pro srovnání můžeme použít komprimované formáty, kde se datový tok pohybuje od několika kilobajtů (například Real video) do řádu megabajtů za sekundu (např. DVD). Většinou se však dá rozumné kvality v rozlišení přibližujícím se normě PAL dosáhnout datovými toky mezi 600 kB/s a 1,2 MB/s. Zvláště oblíbené jsou pro relativně nízké datové toky a zároveň relativně vysokou kvalitu obrazu kompresní formáty MPEG-4 a DivX.

Jelikož karta obsahuje i FM rádiový tuner, snažil jsem se zprovoznit i ten. Nejdříve jsem přidal k příkazu modprobe bttv další volbu radio=1 (tak je příkaz uveden i ve vzorovém výpisu výše). Poté jsem se poohlédl po aplikacích – první mi padl do oka program Gnomeradio.

Instalace ze zdrojových kódů proběhla bez sebemenších problémů, a tak zbývalo rádio jen vyzkoušet. Jelikož jde o velice jednoduchou aplikaci (co by také šlo na rádiu udělat složitého :), vše je velice jednoduše rozloženo a na první pohled jasné. Rádio začalo fungovat okamžitě a naladěné stanice měly čistý zvuk. Zvláštní je, že bez antény karta nechytla ani náznak signálu a zvuk jen šuměl, zato s „kusem kabelu“ dodávaným jako anténa byl příjem výborný.

 

ke stažení: pdf 1 , pdf 2

uveřejněno: duben 2003

 

Gentoo Linux 1.4 rc1

Po zjištění, že mi můj RedHat Linux 7.3 zabírá na harddisku téměř 6 GB, jsem se rozhodl, že než pracně očesávat stávající systém, vyzkouším konečně čistou instalaci Linuxu. Jako “tu správnou” distribuci jsem si vybral Gentoo, kterou jsem již nějaký čas sledoval a plánoval vyzkoušet, jen ještě nebyl čas.

Jelikož nejsem ochotný přijít o své data a zálohovat desktop jsem líný :o), rozhodl jsem se nainstalovat nový systém na druhý, dosud přenosný disk (viz. konfigurace na konci článku).

Jako první jsem si stáhl distribuční CD (http://www.ibiblio.org/pub/Linux/distributions/gentoo/releases/1.2/gentoo-i686-1.2.iso), které má 135 MB. A otevřel instalační dokumentaci na adrese: http://www.gentoo.org/doc/build.html.

Rád bych upozornil, že instalací z již běžícího Linuxu začínáte v oficiální dokumentaci víceméně u bodu 6. (Set up partitions).

Dál jsem tedy otevřel shell konzoli a začal s přípravou, jako první jsem se pro zjednodušení přepnul na roota:

$su root

Password:

#

Potom bylo potřeba nastavit partitiony na harddisku. Připomínám, že jsem instaloval na druhý harddisk zapojený na primárním řadiči jako slave.

#umount /dev/hdb1

#fdisk /dev/hdb

Vytvořil jsem si partitiony následujícím způsobem.

hdb1 ext3 300MB (zamýšlený /boot – zbytečně velký, ale byl jsem líný počítat clustery na MB:o))

hdb2 ext3 5.2GB (zamýšlený root)

hdb3 swap 400MB (zamýšlený swap)

#/sbin/mke2fs -j /dev/hdb1

#/sbin/mke2fs -j /dev/hdb2

#/sbin/mkswap /dev/hdb3

dále jsem vytvořil adresáře pro připojení instalačního CD a instalace Gentoo, připojil instalační harddisk a swap.

#mkdir /mnt/gentoo

#mkdir /mnt/iso

#mount -w -t ext3 /dev/hdb2 /mnt/gentoo

#mkdir /mnt/gentoo/boot

#mount -w -t ext3 /dev/hdb1 /mnt/gentoo/boot

#mount -o loop ~/gentoo-i686-1.2.iso /mnt/iso

#swapon /dev/hdb3

Nyní je čas rozbalit základní filesystem na instalační harddisk. V dokumentaci upozornují na přepínač -p, který zachovává správná práva souborů

#cd /mnt/gentoo

#tar -xvjpf /mnt/iso/stage1-ix86-1.2.tbz2

#mount -o bind /proc /mnt/gentoo/proc

#cp /etc/resolv.conf /mnt/gentoo/etc/resolv.conf

#chroot /mnt/gentoo /bin/bash

# env-update

Regenerating /etc/ld.so.cache

#source /etc/profile

potom jsem napsal podle manuálu příkaz “#emerge sync”, který si má stahnout partage balíček, ale jelikož jsme za firewallem, který nepropustí sync, tak operace neproběhla. Po chvilce hledání jsem našel náhradní řešení. Stahnul jsem portage balíček z adresy: http://www.ibiblio.org/pub/Linux/distributions/gentoo/snapshots/portage-20020924.tar.bz2

POZOR: v novém terminálu! jsem provedl:

$cp ~/portage-20020924.tar.bz2 /mnt/gentoo/usr/portage.tar.bz2

POZOR: opět v původním terminálu instalace! jsem pokračoval:

#cd /usr

#tar -xvjpf ./portage.tar.bz2

#rm ./portage.tar.bz2

dál je potřeba nastavit paramery pro kompilaci, takže jsem vyeditoval soubor /etc/make.conf

#nano -w /etc/make.conf

A odkomentoval jsem pouze řádky v následující části:

# Pentium Pro/Pentium II/Pentium III+/Pentium 4/Athlon optimized (but binaries

# will run on any x86 system)

CHOST=”i686-pc-linux-gnu”

CFLAGS=”-mcpu=i686 -O3 -pipe”

CXXFLAGS=”-mcpu=i686 -O3 -pipe”

Nyní nastala pvní fáze kompilace (binutils, gcc, gettext, glibc):

#cd /usr/portage

#scripts/bootstrap.sh

Tato operace podle manuálu trvala na AMD Athlonu 1200MHz okolo dvou hodin, mě trvala 2 hodiny 34 minuty, tak nevím co si mám myslet o výkonu AMD ;o)

#export CONFIG_PROTECT=””

#emerge -p system

#emerge system

Ted nastává druhá kompilace, kde autoři dokumentace doporučují jakousi hru na Playstation2 (ještě že ne Xbox ;o)), ale já jsem si vesele hrál miny :o)). Kompilace mi trvala 1 hodinu a 57 minut.

Další fází je nastavení časové zóny a stažení a kompilace jádra (cca 26MB).

#ln -sf /usr/share/zoneinfo/CET /etc/localtime

#emerge sys-kernel/gentoo-sources

Zde autoři varují, že jejich jádro je záplatované, takže v případě problémů máme použít oficiální jádro Linuse Tovaldse příkazem “#emerge sys-kernel/vanilla-sources”.

#cd /usr/src/linux

#make menuconfig

Zde autoři dokumentace upozornují na několik důležitých voleb. Z nich jsem vybral následující (ohledně k mé konfiguraci). Ještě poznamenám, že nejsem žádný hacker jádra, takže pokud mi poradíte úspornější instalaci, nebo případné důležité volby, budu rád.

Filesystems / Quota support

Filesystems / Ext3 journalling file system support

Filesystems / Microsoft Joliet CDROM extensions

Filesystems / /dev file system support

Filesystems / NTFS file system support (read only)

Filesystems / Network file systems / SMB file system support

Filesystems / Native Language Support / Windows CP 1250

Filesystems / Native Language Support / NSL ISO 8859-2

Sound / VIA 82C686 Audio Codec

Sound / VIA 82C686 MIDI

General setup / Power Management support / ACPI Support

Parallel port support / Parallel port support / Support foreign hardware

Blok Devices / Ram disk support

Network Device Support / Ethernet (10 or 100Mbit) / 3COM Cards / 3c590-3c900 series

Network Device Support / Ethernet (10 or 100Mbit) / 3COM Cards / 3c509-3c529-3c579…

Console Drivers / Frame-buffer support / Support for frame buffer devices / nVidia Riva support

Console Drivers / Frame-buffer support / Support for frame buffer devices / VESA VGA graphics console

#make dep && make clean bzImage modules modules_install

Kompilace jádra na mém počítači trvala 15 minut. Příkaz “#mv /boot/bzImage /boot/bzImage.orig” jsem vypustil, protože jsem ještě žádné jádro nainstalované neměl.

#cp /usr/src/linux/arch/i386/boot/bzImage /boot

Nyní nastává instalace log deamona a na výběr máte čtyři. Já jsem zvolil sysklogd.

#emerge app-admin/sysklogd

Dále instalujeme cron deamon a opět máme na výběr tentokrát ze tří. Zvolil jsem vcron.

#emerge sys-apps/vcron

# rc-update add *cron default

Je potřeba také nakonfigurovat /etc/fstab

#nano -w /etc/fstab

Soubor /etc/fstab jsem upravil takto:

# <fs> <mountpoint> <type> <opts> <dump/pass>

# NOTE: If your BOOT partition is ReiserFS, add the notail option to opts.

/dev/hdb1 /boot ext3 noauto,noatime 1 1

/dev/hdb2 / ext3 noatime 0 0

/dev/hdb3 none swap sw 0 0

/dev/cdroms/cdrom0 /mnt/cdrom iso9660 noauto,ro 0 0

proc /proc proc defaults 0 0

Nastavíme heslo pro uživatele root

#passwd

New UNIX password:

Retype new UNIX password:

Nastavíme /etc/hosts

#echo mymachine.mydomain.cz> /etc/hostname

Nastavíme které moduly se mají po startu zavádět. Což je důležité např. u sítové karty

#nano /etc/modules.autoload

zde jsem odkomentoval rádku:

3c59x

#nano -w /etc/conf.d/net

Nastavíme sít jako napriklad:

iface_eth0=”192.168.0.2 broadcast 192.168.0.255 netmask 255.255.255.0″

Nastavíme eth0 jako primární:

#rc-update add net.eth0 default

V souboru /etc/rc.conf nastavíme “CLOCK=”local” ”.

#nano -w /etc/rc.conf

Nastavil jsem si DMA přístup na oba harddisky.

#nano -w /etc/conf.d/local.start

Pridal následující rádky do souboru:

hdparm -d 1 /dev/hdb

hdparm -d 1 /dev/hda

Poslední důležitou věcí je nastavení boot manageru grub

Přepnul jsem si do mého RedHat Linuxu a změnit /etc/grub.conf následovně:

#pico /etc/grub.conf

default=0

timeout=10

splashimage=(hd0,0)/grub/splash.xpm.gz

password –md5 $1$syϪioK6$xNK22p8AIuu3EtNYmRxjh.

title Red Hat Linux (2.4.18-10)

root (hd0,0)

kernel /vmlinuz-2.4.18-10 ro root=/dev/hda2

initrd /initrd-2.4.18-10.img

title Gentoo Linux

root (hd1,0)

kernel /bzImage ro root=/dev/hdb2

Opět se přihlásíme do instalačního terminálu Gentoo Linuxu provedeme poslední krok:

#etc-update

#exit

Tím jsem opět v konzoli RedHat Linuxu. Ještě odpojit Gentoo Linux partitiony a můžeme restartovat.

#cd /

#umount /dev/hdb1

#umount /dev/hdb2

#/sbin/swapoff /dev/hdb3

restart

Poté je již možné instalovat Váš oblíbený software. Doporučuji vždy před instalací nejdříve zkontrolovat závyslosti přepínačen –pretend.

#emerge –pretend software_name

Instalaci provedete příkazem:

#emerge software_name

Konfigurace:

Procesor: Pentium III, 666 Mhz

MB: Microstar

RAM: 2 x 128 MB, 133 Mhz

HDD: Seagate ST31022 9 GB, Seagate ST36421A 6GB

NIC: 3com 3c905C/TX-M

Sound: onboard VT82C686 AC97

Video: Riva TnT2 Ultra

Floppy, ATAPI CD-ROM