FreeBSD kézikönyv
Előző | Fejezet 7. Multimédia | Következő

# 7.4. Videók lejátszása

Írta: Ross Lippert.

A videolejátszás egy nagyon friss és gyorsan fejlődő alkalmazási terület. Legyünk türelmesek, ez nem minden fog annyira könnyen menni, mint a hangok esetében.

A kezdéshez nem árt tudnunk, hogy a videokártyánk milyen gyártmányú és milyen chipet használ. Míg az Xorg és az XFree86™ számos különféle videokártyát ismer, csupán töredékükkel lehet jó lejátszási teljesítményt előhozni. Az X11 futtatása közben az xdpyinfo(1) parancs kiadásával kérdezhetjük le az X szervertől a kártyánk használatával elérhető kiterjesztéseket.

Érdemes a kezünk ügyében tartani egy rövidke MPEG formátumú állományt, amellyel majd ki tudjuk próbálni a különféle lejátszókat és azok beállításait. Mivel egyes DVD lejátszók alapértelmezés szerint a `/dev/dvd` helyen keresik a lejátszandó DVD eszközt, vagy egyszerűen csak így írták meg ezeket, mindenképpen hasznos lehet, ha szimbolikus linkeket hozunk létre a megfelelő eszközökre:

    # ln -sf /dev/acd0 /dev/dvd
    # ln -sf /dev/acd0 /dev/rdvd

A devfs(5) működése miatt azonban ezek a kézzel létrehozott linkek az újraindítás után már nem maradnak meg. A szimbolikus linkeket a rendszer minden egyes indulásakor úgy tudjuk automatikusan létrehozni, hogyha az `/etc/devfs.conf` állományba felvesszük az alábbi sort:

    link acd0 dvd
    link acd0 rdvd

Emellett a DVD-k titkosításának feloldása, mely a DVD-meghajtók speciális funkcióit igényli, a DVD eszközökön írási jogot is igényel.

Az X11 osztott memóriát kezelő felületének gyorsításához javasolt néhány sysctl(8) változó értékének megnövelése is:

    kern.ipc.shmmax=67108864
    kern.ipc.shmall=32768

## 7.4.1. A megjelenítő képességeinek megállapítása

Több különböző úton lehet X11 alatt videókat nézni, de ennek tényleges módját igazából a rendelkezésre álló hardver határozza meg. Az itt leírt módszerek által kihozható minőség hardverenként eltérhet. Másodsorban a videók megjelenítése az X11-ben az utóbbi időben igen nagy hangsúlyt kapott, ezért az Xorg és az XFree86 minden egyes változatával jelentősen javulhat a helyzet ezen a téren.

A videók megjelenítésére használt gyakori felületek:

1. X11: az X11 normális kimenete osztott memórián keresztül

2. XVideo: az X11 felületének kiterjesztése, ami tetszőleges X11 által kirajzolható objektum esetén támogat videót

3. SDL: a Simple Directmedia Layer

4. DGA: a Direct Graphics Access (közvetlen grafikus hozzáférés)

5. SVGAlib: alacsonyszintű konzolos grafikus réteg

### 7.4.1.1. XVideo

Az Xorg és az XFree86 4.X rendelkezik egy XVideo (avagy Xvideo, Xv, xv) elnevezésű kiterjesztéssel, amelyen keresztül egy speciális gyorsítás segítségével a kirajzolható objektumokban közvetlenül meg tudunk jeleníteni videókat. Ezzel a kiterjesztéssel még a gyengébb gépeken is nagyon jó minőségű lejátszást tudunk elérni.

A kiterjesztés működéséről az `xvinfo` parancs kiadásával győződhetünk meg:

    % xvinfo

Ha a parancs eredménye ehhez hasonló, akkor a kártyánk támogatja az XVideót:

    X-Video Extension version 2.2
    screen #0
      Adaptor #0: "Savage Streams Engine"
        number of ports: 1
        port base: 43
        operations supported: PutImage
        supported visuals:
          depth 16, visualID 0x22
          depth 16, visualID 0x23
        number of attributes: 5
          "XV_COLORKEY" (range 0 to 16777215)
                  client settable attribute
                  client gettable attribute (current value is 2110)
          "XV_BRIGHTNESS" (range -128 to 127)
                  client settable attribute
                  client gettable attribute (current value is 0)
          "XV_CONTRAST" (range 0 to 255)
                  client settable attribute
                  client gettable attribute (current value is 128)
          "XV_SATURATION" (range 0 to 255)
                  client settable attribute
                  client gettable attribute (current value is 128)
          "XV_HUE" (range -180 to 180)
                  client settable attribute
                  client gettable attribute (current value is 0)
        maximum XvImage size: 1024 x 1024
        Number of image formats: 7
          id: 0x32595559 (YUY2)
            guid: 59555932-0000-0010-8000-00aa00389b71
            bits per pixel: 16
            number of planes: 1
            type: YUV (packed)
          id: 0x32315659 (YV12)
            guid: 59563132-0000-0010-8000-00aa00389b71
            bits per pixel: 12
            number of planes: 3
            type: YUV (planar)
          id: 0x30323449 (I420)
            guid: 49343230-0000-0010-8000-00aa00389b71
            bits per pixel: 12
            number of planes: 3
            type: YUV (planar)
          id: 0x36315652 (RV16)
            guid: 52563135-0000-0000-0000-000000000000
            bits per pixel: 16
            number of planes: 1
            type: RGB (packed)
            depth: 0
            red, green, blue masks: 0x1f, 0x3e0, 0x7c00
          id: 0x35315652 (RV15)
            guid: 52563136-0000-0000-0000-000000000000
            bits per pixel: 16
            number of planes: 1
            type: RGB (packed)
            depth: 0
            red, green, blue masks: 0x1f, 0x7e0, 0xf800
          id: 0x31313259 (Y211)
            guid: 59323131-0000-0010-8000-00aa00389b71
            bits per pixel: 6
            number of planes: 3
            type: YUV (packed)
          id: 0x0
            guid: 00000000-0000-0000-0000-000000000000
            bits per pixel: 0
            number of planes: 0
            type: RGB (packed)
            depth: 1
            red, green, blue masks: 0x0, 0x0, 0x0

Az XVideo nem mindegyik implementációjában vannak jelen a felsorolt formátumok (YUV2, YUV12 stb.), ami viszont néhány lejátszó számára akadályokat jelenthet.

Amennyiben viszont ezt látjuk:

    X-Video Extension version 2.2
    screen #0
    no adaptors present

Akkor a kártyánk nem rendelkezik XVideo támogatással.

Ha az XVideo nem támogatott a kártyánk számára, akkor az csupán csak annyit jelent, hogy a gépünknek nehéz dolga lesz a videók megjelenítéséhez szükséges számítási kapacitás kiszolgálásában. Azonban a videokártyánktól és processzorunktól függően még így is kielégítő eredményt tudunk előcsalni. Ekkor viszont minden bizonnyal érdemes lesz átolvasnunk a 7.4.3 Szakaszban, miként tudjuk növelni a teljesítményét.

### 7.4.1.2. A Simple Directmedia Layer

A Simple Directmedia Layer, vagy SDL, eredetileg a Microsoft® Windows®, BeOS és UNIX® közti hordozhatóságot szándékozta megvalósítani, aminek segítségével a hangot és grafikát hatékonyan használni tudó alkalmazások hozhatóak létre. Az SDL által nyújtott réteg a hardver olyan alacsonyszintű absztrakcióját öleli fel, amely gyakran még az X11 felületénél is hatékonyabb.

Az SDL a `devel/sdl12` helyen található.

### 7.4.1.3. Direct Graphics Access (Közvetlen grafikus hozzáférés)

A közvetlen grafikus hozzáférés az X11 egy olyan kiterjesztése, ami lehetővé teszi a programok számára az X szerver megkerülését és így közvetlenül a videokártya memóriáját képesek elérni. Mivel a megosztás hatékony megvalósításához ez nagyban építkezik alacsonyszintű leképzési műveletekre, ezért az ilyet használó programokat `root` felhasználóként kell futtatni.

A DGA kiterjesztés a dga(1) segítségével tesztelhető és mérhető. A `dga` parancs kiadása után minden billentyű lenyomására megváltoztatja a képernyőn látható színeket. A kilépéshez a q billentyűt kell lenyomni.

## 7.4.2. A videókkal foglalkozó portok és csomagok

Ebben a szakaszban a FreeBSD Portgyűjteményéből a videók lejátszására alkalmas programokat vesszük számba. A videolejátszás nagyon gyorsan fejlődő terület, ezért az itt említett különböző alkalmazások képességei az itt leírtaktól némileg eltérhetnek.

Először is fontos tisztában lennünk azzal, hogy számos FreeBSD-n futó videoalkalmazás eredetileg linuxos alkalmazásként indult, és közülük sokan még csak béta minőségűek. Íme a FreeBSD-n is megtalálható videocsomagokkal kapcsolatos néhány olyan gond, amivel esetleg összefuthatunk:

1. Az egyik alkalmazás nem képes visszajátszani olyan állományt, amit egy másik alkalmazás hozott létre.

2. Az alkalmazás nem képes visszajátszani a saját maga által készített állományokat.

3. Ugyanazon alkalmazás két különböző gépen, amikor mind a kettőn az adott konfigurációra fordítjuk le, ugyanazt az állományt másképpen játssza vissza.

4. Egy olyan látszólag egyértelmű szűrő, mint például a kép átméretezése, a hibás átméretező rutin miatt nagyon csúnya eredményt produkál.

5. Az alkalmazás gyakran elszáll.

6. A porthoz nem találjuk a dokumentációt, egyedül csak az interneten vagy a port `work` könyvtárában van.

Sok alkalmazás a “linuxizmus” jeleit is hordozza, vagyis gondok adódhatnak abból, hogy a szerzők az alkalmazások működtetéséhez a Linux rendszermag és a különféle terjesztésekben megtalálható módosított szabványos könyvtárak különlegességeit használják ki. Ezeket a portok karbantartói nem mindig észlelik és javítják ki, ami miatt az alábbiak bármikor bekövetkezhetnek:

1. A processzor jellemzőit a `/proc/cpuinfo` állományon keresztül állapítják meg.

2. A szálak helytelen használatuk miatt a program befejeződésekor összeakadnak.

3. Az alkalmazással gyakran együtt használt egyéb alkalmazások még nem nincsenek benne a FreeBSD Portgyűjteményében.

Az ilyen alkalmazások fejlesztői a hordozhatóság javításával és a problémák megoldásával kapcsolatban eddig mindig igyekeztek együttműködni a portok karbantartóival.

### 7.4.2.1. MPlayer

Az MPlayer az utóbbi időben felbukkant, gyorsan fejlődő videolejátszó. Fejlesztőinek célja a sebesség és rugalmasság a Linux, illetve más UNIX rendszereken. A kezdeményezés abból fakadt, hogy a fejlesztés mögött álló csapat alapítójának elege lett az akkoriban elérhető lejátszók teljesítményéből. Mondhatnánk, hogy ez a program feláldozta a grafikus felületet az áramvonalas kialakításért, azonban ha hozzászokunk a parancssori beállításokhoz és a billentyűkön keresztüli vezérléshez, remekül működik.

#### 7.4.2.1.1. Az MPlayer lefordítása

Az MPlayer a `multimedia/mplayer` helyen található. A program a fordítási folyamat során elvégez számos hardverellenőrzést, aminek eredményeképpen az egyik rendszeren fordított program nem vihető a másikra. Ezért különösen fontos portból fordítani és nem pedig bináris csomagot használni. Mindezek mellett a `Makefile` állományban még számos, a `make` parancsnak a fordítás megkezdésekor átadható beállítást találhatunk:

    # cd /usr/ports/multimedia/mplayer
    # make
    N - O - T - E

    Take a careful look into the Makefile in order
    to learn how to tune mplayer towards you personal preferences!
    For example,
    make WITH_GTK1
    builds MPlayer with GTK1-GUI support.
    If you want to use the GUI, you can either install
    /usr/ports/multimedia/mplayer-skins
    or download official skin collections from
    http://www.mplayerhq.hu/homepage/dload.html

Az üzenet fordítása:

    F - I - G - Y - E - L - E - M

    Az mplayert személyes igényeinkhez úgy tudjuk igazítani, ha
    figyelmesen átnézzük a Makefile állományt!  Például a WITH_GTK1
    megadásával az MPlayer GTK1 alapú grafikus felülettel jön létre.
    A grafikus felület használatához telepítenünk kell a
    /usr/ports/multimedia/mplayer-skins portot is, vagy letölteni a
    hivatalos skingyűjteményt a http://www.mplayerhq.hu/homepage/dload.html
    oldalról.

A port alapbeállításai a legtöbb felhasználó számára megfelelőek, habár az Xvid kódek használatához meg kell adnunk a `WITH_XVID` beállítást. Rajta kívül még az alapértelmezett DVD eszközt is érdemes megadni a `WITH_DVD_DEVICE` beállítással, amelynek alapértéke a `/dev/acd0`.

A leírás elkészítésének időpontjában az MPlayer portja létrehozza a HTML dokumentációt és a két végrehajtható állományt: az `mplayer` lejátszót és a videók újrakódolásáért felelős `mencoder` segédprogramot.

Az MPlayer HTML dokumentációja nagyon közlékeny, és ha az olvasó nem találná valamelyik videohardver vagy felület leírását ebben a fejezetben, akkor ez a dokumentáció mindenképpen hasznos olvasnivalónak bizonyul. Ha a UNIX-ok alatt elérhető videotámogatás leírását keressük, határozottan megéri időt szánni az MPlayer dokumentációjának alapos végigolvasására.

#### 7.4.2.1.2. Az MPlayer használata

Az MPlayer használatához a felhasználói könyvtárunkban rendelkeznünk kell egy `.mplayer` elnevezésű könyvtárral. Ezt a következő paranccsal tudjuk létrehozni:

    % cd /usr/ports/multimedia/mplayer
    % make install-user

Az `mplayer` parancssori paraméterei a hozzá tartozó man oldalon találhatóak meg, valamint mindezek a HTML dokumentációban még részletesebben. Ebben a szakaszban csupán néhányukat mutatjuk be.

Egy állomány, mint például a ``tesztvideo.avi``, a `-vo` beállításával játszható le a különböző felületeken:

    % mplayer -vo xv tesztvideo.avi

    % mplayer -vo sdl tesztvideo.avi

    % mplayer -vo x11 tesztvideo.avi

    # mplayer -vo dga tesztvideo.avi

    # mplayer -vo 'sdl:dga' tesztvideo.avi

Érdemes az itt felsorolt konfigurációk mindegyikét kipróbálni, mivel az egymáshoz mért teljesítményük rengeteg tényezőn múlik, de közülük talán maga a hardver a legjelentősebb.

A DVD-k lejátszásához cseréljük ki a ``tesztvideo.avi`` paramétert a `dvd://`N` -dvd-device `ESZKÖZ`` paraméterekkel, ahol az `N` a lejátszandó fejezet sorszáma, valamint az ``ESZKÖZ`` a DVD-hez tartozó eszközleíró. Például így tudjuk elkezdeni `/dev/dvd` eszközről a 3. fejezet lejátszását:

    # mplayer -vo xv dvd://3 -dvd-device /dev/dvd

> Megjegyzés: A port fordítása során a `WITH_DVD_DEVICE` paraméter segítségével megadható az alapértelmezett DVD eszköz, amely alapból a `/dev/acd0`. Erről többet a port `Makefile` állományában találhatunk.

A leállításhoz, szüneteltetéshez, továbblépéshez és többi hasonló funkcióhoz tartozó billentyűket a `mplayer -h` parancs kimenetéből vagy a man oldal elolvasásából deríthetjük ki.

A lejátszáshoz tartozó néhány viszonylag fontos beállítás: az `-fs -zoom` teljesképernyős módra vált, valamint a `-framedrop` segít növeli a teljesítményt.

A lejátszáskor kiadandó parancs túlburjánzását el tudjuk kerülni, ha létrehozunk egy `.mplayer/config` állományt és itt állítjuk be a gyakori opciókat:

    vo=xv
    fs=yes
    zoom=yes

Végezetül megemlítjük, hogy az `mplayer` segítségével a DVD-n található fejezeteket ki tudjuk menteni `.vob` állományokba. A DVD második fejezetének kimentéséhez gépeljük be ezt:

    # mplayer -dumpstream -dumpfile out.vob dvd://2 -dvd-device /dev/dvd

A parancs eredményeképpen keletkező `out.vob` állomány formátuma MPEG lesz, amit a fejezetben bemutatott további csomagokkal tudunk feldolgozni.

#### 7.4.2.1.3. mencoder

A `mencoder` használatának megkezdése előtt javasolt alaposan beleásnunk magunkat a HTML dokumentációba és megismerkednünk az alapvető beállításaival. Van külön man oldala is, azonban a HTML leírás nélkül önmagában ez nem túl sokat ér. Megszámlálhatatlan úton és módon növelhető benne a minőség, csökkenthető a kódolási arány, változtatható a formátum, és ezen apró finomságok felelősek a jó vagy éppen a rossz teljesítményért. A témába néhány példa bemutatásával igyekszünk beavatni az olvasót. Először vegyünk egy egyszerű másolást:

    % mencoder bemenő.avi -oac copy -ovc copy -o eredmény.avi

A parancssori paraméterek helytelen kombinációja olyan állományokat eredményezhet, amelyeket még maga az `mplayer` sem képes lejátszani. Ezért ha csak le akarunk szedni egy állományt, akkor maradjunk meg az `mplayer` `-dumpfile` opciójánál.

A ``bemenő.avi`` állományt MPEG4 video- és MPEG3 hangtömörítéssel (amihez kell majd a `audio/lame`) így tudjuk lekódolni:

    % mencoder bemenő.avi -oac mp3lame -lameopts br=192 \
    	 -ovc lavc -lavcopts vcodec=mpeg4:vhq -o eredmény.avi

Ezzel az `mplayer` és `xine` programok számára is egyaránt lejátszható állomány jön létre.

A DVD fejezeteit úgy tudjuk közvetlenül kódolni, ha a parancssorban kicseréljük a ``bemenő.avi`` állományt az `dvd://1 -dvd-device /dev/dvd` beállításra, illetve ha a programot `root` felhasználóként futtatjuk. De mivel elsőre általában ritkán vagyunk elégedettek a kódolással, érdemes először inkább lementeni az egész fejezetet egy állományba, majd azon dolgozni.

### 7.4.2.2. A xine videolejátszó

A xine egy széles hatókörű projekt, amelynek nem csak az a célja, hogy egy “mindenes” videolejátszó alkalmazást fejlesszenek, hanem az is, hogy újrahasznosítható függvénykönyvtárakat és egy moduláris felépítésű programot hozzanak létre, amely kiegészítűkkel bűvíthetű. A `multimedia/xine` helyen portként, valamint csomagként is elérhető.

A xine itt-ott még valamelyest durva, de mindenképpen egy dicséretes kezdeményezés. A xine a gyakorlatban erős processzort és mellé gyors videokártyát kíván, vagy pedig az XVideo kiterjesztés támogatását. A grafikus felhasználói felülete ugyan használható, de még kicsit esetlen.

Az írás pillanatában a xine mellé még nem kapunk olyan modult, amivel le tudnánk játszani a CSS kódolású DVD-ket. Léteznek azonban olyan külsős modulok, amelyekkel meg lehet valósítani ezt a feladatot, azonban a FreeBSD Portgyűjteményében ezeket még nem találhatjuk meg.

A xine az MPlayerhez képes többet tesz a felhasználóért, azonban ezzel egyidőben el is veszi tőle a finomhangolás lehetőségét. A xine legjobban az XVideót ismerő felületeken teljesít.

A xine alapértelmezés szerint grafikus felülettel indul, ahol a menük segítségével tudunk megnyitni egy adott állományt:

    % xine

Vagy a grafikus felület használata nélkül kiadhatjuk közvetlenül is az állomány lejátszását:

    % xine -g -p kedvencmozim.avi

### 7.4.2.3. A transcode

A transcode nem egy újabb lejátszó, hanem a video- és audio állományok újratömörítésére használható programok gyűjteménye. A transcode segítségével a szabványos be- és kimeneten keresztül parancssoros programokkal képesek vagyunk videoállományokat összefűzni, megjavítani.

A `multimedia/transcode` port fordítása során temérdek beállítást adhatunk meg, amelyek közül az alábbi parancsban foglaljuk össze az általunk javasolandókat:

    # make WITH_OPTIMIZED_CFLAGS=yes WITH_LIBA52=yes WITH_LAME=yes WITH_OGG=yes \
    WITH_MJPEG=yes -DWITH_XVID=yes

Ezek a beállítások a legtöbb felhasználó számára elegendőek.

A `transcode` képességeinek illusztrálásához lássunk egy példát, amiben megmutatjuk, hogyan kell egy DivX állományt PAL szabványú MPEG-1 formátumú (PAL VCD) állománnyá alakítani:

    % transcode -i bemenő.avi -V --export_prof vcd-pal -o output_vcd
    % mplex -f 1 -o eredmény_vcd.mpg eredmény_vcd.m1v eredmény_vcd.mpa

Az eredményül keletkező ``eredmény_vcd.mpg`` MPEG állomány akár már játszható is MPlayerrel. Ha az állományt kiírjuk egy írható CD-re, akkor ezzel video CD-t is létre tudunk hozni, amihez viszont szükségünk van mind a `multimedia/vcdimager` és `sysutils/cdrdao` programokra.

A `transcode` parancsnak van saját man oldala, azonban ehelyett a transcode wikiben érdemes inkább további információkat és példákat keresni.

## 7.4.3. Ajánlott olvasmányok

A FreeBSD-hez tartozó videoszoftverek nagyon gyorsan fejlődnek. Könnyen elképzelhető, hogy az imént tárgyalt problémák legtöbbje a közeljövőben hamarosan megoldódik. Addig viszont bárkinek, aki a legtöbbet szeretné kihozni a FreeBSD audio- és video lehetőségeiből, rengeteg leírás és dokumentáció elolvasása alapján kell összecsiszolnia a különböző beállításokat, és csak néhány alkalmazás mellett érdemes kitartania. Ebben a szakaszban igyekszünk segíteni az olvasónak megtalálni az ilyen jellegű információkat.

Az MPlayer dokumentációja szakmai szempontból igen közlékeny. Ezt mindenkinek érdemes elolvasnia, aki a későbbiekben magasabb szakmai szinten akar foglalkozni a UNIX-os videózással. Az MPlayer levelezési listája viszont alig tolerálja a dokumentációt rendesen el nem olvasó emberek kérdéseit, ezért minden egyes hiba bejelentése előtt lehetőleg rendesen nézzük át a dokumentáció odavágó részeit.

A xine HOGYAN egyik külön fejezetében az összes lejátszó esetén érvényesíthető teljesítménynövelési módszereket mutat be.

Végül íme néhány ígéretes alkalmazás, amelyeket érdemes kipróbálnunk:

- Avifile, ami egyben a `multimedia/avifile` port

- Ogle, ami a `multimedia/ogle` port

- Xtheater

- `multimedia/dvdauthor`, egy nyílt forráskódú DVD-tartalom szerkesztő

Előző | Tartalom | Következő
MP3 | Fel | TV kártyák beállítása

Ha kérdése van a FreeBSD-vel kapcsolatban, a következő címre írhat (angolul): <freebsd-questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon: <gabor@FreeBSD.org>.