Video afspelen is een relatief nieuwe en zich snel ontwikkelende richting voor applicaties. In tegenstelling tot voor audio werkt alles hier niet zo soepel.
Voor er wordt begonnen is het van belang te weten welk model videokaart zich in een systeem bevindt en welke chip die gebruikt. Hoewel Xorg vele videokaarten ondersteunt, zijn er veel minder geschikt om goed video mee af te spelen. Er kan een lijst met ondersteunde extensies getoond worden voor X server met de gebruikte videokaart door het commando xdpyinfo(1) uit te voeren terwijl X11 draait.
Het is verstandig een kort MPEG-bestand beschikbaar te
hebben dat gebruikt kan worden als testbestand voor het
evalueren van de spelers en hun opties. Omdat sommige
DVD-spelers standaard zoeken naar DVD media in
/dev/dvd
of deze apparaatnaam standaard in
de broncode hebben staan, is het wellicht verstandig om een
symbolische link te maken naar de juiste apparaten:
#
ln -sf /dev/acd0 /dev/dvd
#
ln -sf /dev/acd0 /dev/rdvd
Vanwege de werking van devfs(5), blijven handmatig
aangemaakte links niet bestaan als een systeem wordt herstart.
Om automatisch symbolische links aan te laten maken als een
systeem start, kunnen de volgende regels toegevoegd worden aan
/etc/devfs.conf
:
link acd0 dvd link acd0 rdvd
Daarnaast zijn voor het decoderen van DVD, waarvoor bijzondere DVD-ROM functies aangeroepen worden, schrijfrechten op de DVD-apparaten nodig.
Om de gedeeld-geheugeninterface van X11 te verbeteren, wordt aangeraden dat een aantal variabelen van sysctl(8) worden verhoogd:
kern.ipc.shmmax=67108864 kern.ipc.shmall=32768
Er zijn een aantal methoden om video weer te geven onder X11. Welke echt werkt, is voornamelijk afhankelijk van de gebruikte hardware. Iedere hieronder beschreven methode geeft andere resultaten op andere hardware. De laatste tijd krijgt het renderen van video in X11 veel aandacht en bij iedere versie van Xorg kan er een aanzienlijke verbetering zijn.
Een lijst van veel gebruikte video-interfaces:
X11: normale X11 uitvoer met gebruikmaking van gedeeld geheugen;
XVideo: een uitbreiding op de X11 interface die video in een door X11 getekend object ondersteunt;
SDL: de Simple Directmedia Layer;
DGA: de Direct Graphics Access;
SVGAlib: low level console grafische laag.
Xorg kent een uitbreiding XVideo, ook bekend als Xvideo, Xv of xv, waarmee video direct weergegeven kan worden in getekende objecten door een speciale versneller. Deze uitbreiding geeft een goede afspeelkwaliteit, zelfs op machines met mindere specificaties.
Of de uitbreiding actief is, kan gecontroleerd worden met
het commando xvinfo
:
%
xvinfo
XVideo wordt ondersteund als de uitvoer er ongeveer als volgt uitziet:
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
Sommige van de weergegeven formaten (YUV2, YUV12, enzovoort) zijn niet in iedere implementaties van XVideo beschikbaar en hun afwezigheid kan sommige spelers hinderen.
Als het resultaat er als hieronder uitziet, is er geen ondersteuning voor XVideo aanwezig op de videokaart in een systeem:
X-Video Extension version 2.2 screen #0 no adaptors present
Als XVideo voor een kaart niet wordt ondersteund, dan betekent dat alleen dat het lastiger wordt om op een beeldscherm aan de vereisten voor het renderen van video te voldoen. Afhankelijk van de videokaart en de processor kan het toch nog mogelijk zijn om acceptabele prestaties neer te zetten. In Paragraaf 8.4.3, “Verder lezen” staan verwijzingen naar leesvoer over mogelijkheden voor het verbeteren van prestaties.
De Eenvoudige Directmedia Laag (Simple Directmedia Layer), SDL, is een porting-laag voor vele besturingssystemen waardoor cross-platform toepassingen kunnen worden ontwikkeld die efficiënt gebruik maken van geluid en beelden. De SDL laag biedt een abstractie op laag niveau naar de hardware die soms efficiënter kan zijn dan de X11 interface.
De SDL staat in devel/sdl12.
Directe Grafische Toegang (Direct Graphics Access) is een
X11 uitbreiding die een programma in staat stelt voorbij te
gaan aan de X server en de framebuffer direct kan wijzigen.
Omdat hij afhankelijk is van geheugenmapping op een laag
niveau om dit delen uit te voeren, moeten programma's die er
gebruik van maken als root
draaien.
De DGA uitbreiding kan getest en gebenchmarkt worden met
dga(1). Als dga
draait, verandert
het de kleuren op een scherm als er een toets wordt
ingedrukt. Om te stoppen kan de toets q
gebruikt worden.
In dit onderdeel wordt de software die vanuit de FreeBSD Portscollectie beschikbaar is voor het afspelen van video beschreven. Het afspelen van video is een tak van softwareontwikkeling die erg in beweging is en de mogelijkheden van de verschillende applicaties verschillen zeer waarschijnlijk van wat hier is beschreven.
Als eerste is het belangrijk om te weten dat veel applicaties die met video te maken hebben en op FreeBSD draaien ontwikkeld zijn als Linux® applicaties. Veel van die applicaties zijn op het moment van schrijven van beta-kwaliteit. Problemen die te verwachten zijn bij het gebruik van de beschreven videopakketten op FreeBSD zijn:
Een applicatie kan geen bestanden afspelen die zijn gemaakt met een andere applicatie;
Een applicatie kan geen bestanden afspelen die met de applicatie zelf zijn gemaakt;
Dezelfde applicatie, op twee verschillende machines gebouwd, speelt hetzelfde bestand op twee machines anders af;
Een ogenschijnlijk triviale filter, zoals het herschalen van beeldgrootte, kan resulteren in vreselijk vervelende artefacten door fouten in de routine voor het herschalen;
Een applicatie dumpt zijn core regelmatig;
Documentatie wordt niet geïnstalleerd bij de port
en staat op het web of in de map work
van de port.
Veel van deze applicaties kunnen ook “Linux-ismes” vertonen. Zo kunnen er bijvoorbeeld problemen ontstaan door de wijze waarop standaard bibliotheken zijn geïmplementeerd in de Linux® distributies of een aantal van de mogelijkheden van de Linux®-kernel, waarvan door de makers van de applicatie wordt aangenomen dat ze aanwezig zijn. Dit soort problemen zijn niet altijd zichtbaar en er wordt ook omheen gewerkt door de beheerders van ports, wat tot de volgende mogelijke problemen kan leiden:
Het gebruik van /proc/cpuinfo
om
processorkarakteristieken uit te lezen;
Het verkeerd gebruiken van threads, waardoor een programma hangt als het klaar is, in plaats van dat het echt eindigt;
Software die nog niet in de FreeBSD Portscollectie zit en vaak gebruikt wordt samen met een applicatie die daar wel onderdeel van uitmaakt.
Tot nu toe is gebleken dat de ontwikkelaars van applicaties wel coöperatief waren met de beheerders van ports om zo het aantal work-arounds dat nodig was voor het overzetten tot een minimum te beperken.
MPlayer is een zich snel ontwikkelende videospeler. De doelen van het MPlayer-team zijn snelheid en flexibiliteit onder Linux® en andere Unices. Het project is gestart toen de oprichter van het team genoeg had van de slechte afspeelprestaties van de destijds beschikbare spelers. Er zijn mensen die zeggen dat het grafische ontwerp is opgeofferd voor het stroomlijnen van het ontwerp, maar het blijkt dat, als een gebruiker gewend is aan de commandoregelopties en de toetsencommando's, de applicatie erg goed werkt.
MPlayer staat in multimedia/mplayer.
MPlayer voert een aantal
hardwarecontroles uit tijdens het bouwen, wat resulteert in
een binair bestand dat niet van het ene naar het andere
systeem verplaatst kan worden. Daarom is het van belang
dat het uit de ports wordt gebouwd en niet als binair
pakket wordt geïnstalleerd. Daarnaast staan er ook
nog opties die vanaf de make
commandoregel meegegeven kunnen worden beschreven in de
Makefile
en aan het begin van de
build:
#
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
De standaard portopties zijn voor de meeste gebruikers
voldoende. Maar als bijvoorbeeld de XviD codec nodig is,
dan moet de optie WITH_XVID
op de
commandoregel meegegeven worden. Het standaard
DVD-apparaat kan ook gedefinieerd worden met de optie
WITH_DVD_DEVICE
, waarbij standaard
/dev/acd0
wordt gebruikt.
Op het moment van schrijven wordt de
MPlayer port gebouwd met de HTML
documentatie en twee uitvoerbare bestanden,
mplayer
en mencoder
,
wat een hulpmiddel is voor het opnieuw encoderen van
video.
De HTML documentatie voor MPlayer is erg informatief. Als de lezer vindt dat er informatie over videohardware en interfaces in dit hoofdstuk mist, dan is de documentatie van MPlayer een zeer grondige aanvulling. Het is de moeite waard de tijd te nemen om de documentatie van MPlayer te lezen, als meer informatie over de ondersteuning van video in UNIX® welkom is.
Iedere gebruiker van MPlayer
dient een submap .mplayer
in zijn
thuismap te hebben. Die kan als volgt gemaakt
worden:
%
cd /usr/ports/multimedia/mplayer
%
make install-user
De commando-opties voor mplayer
staan in de hulppagina. Nog meer details staan in de HTML
documentatie. In dit onderdeel worden slechts een aantal
gebruiksmogelijkheden beschreven.
Om een bestand als
testbestand.avi
af te spelen met een van de beschikbare video-interfaces,
kan de optie -vo
gebruikt worden:
%
mplayer -vo xv testbestand.avi
%
mplayer -vo sdl testbestand.avi
%
mplayer -vo x11 testbestand.avi
#
mplayer -vo dga testbestand.avi
#
mplayer -vo 'sdl:dga' testbestand.avi
Het is de moeite waard alle bovenstaande opties uit te proberen omdat hun relatieve prestatie afhangt van vele factoren die aanzienlijk verschillen tussen hardware.
Om een DVD af te spelen dient
testbestand.avi
vervangen te worden door
dvd://
waar
N
-dvd-device
APPARAAT
N
het titelnummer is dat
afgespeeld moeten worden en
APPARAAT
het
apparaatknooppunt is voor de DVD-ROM. Om bijvoorbeeld titel
3 van /dev/dvd
af te spelen:
#
mplayer -vo xv dvd://3 -dvd-device /dev/dvd
Het standaard DVD-apparaat kan ingesteld worden bij
het bouwen van de MPlayer port
met de optie WITH_DVD_DEVICE
.
Standaard is dit apparaat /dev/acd0
.
Meer details staan in de Makefile
van de port.
Om te stoppen, pauzeren, verder te spoelen, enzovoort,
kunnen de toetsendefinities gebruikt worden, die in te zien
zijn door mplayer -h
uit te voeren of
de hulppagina te lezen.
Overige belangrijke opties voor het afspelen zijn:
-fs -zoom
, waarmee het volledige scherm
wordt gebruikt, en -framedrop
, die
prestatieverhogend werkt.
Om ervoor te zorgen dat de commandoregels niet te lang
worden, kan het bestand
.mplayer/config
met
voorkeursinstellingen gemaakt worden:
vo=xv fs=yes zoom=yes
Tenslotte kan mplayer
gebruikt
worden om een DVD naar een bestand van het type
.vob
te rippen. Om de tweede titel
van een DVD de dumpen kan het volgende commando gebruikt
worden:
#
mplayer -dumpstream -dumpfile out.vob dvd://2 -dvd-device /dev/dvd
Het uitvoerbestand out.vob
, is
van het type MPEG en kan bewerkt worden met andere in dit
onderdeel besproken programma's.
Voordat mencoder
wordt gebruikt, is
het verstandig de opties uit de HTML-documentatie te
bekijken. Er is een hulppagina, maar die is niet echt
bruikbaar zonder de HTML-documentatie. Er zijn ontelbare
mogelijkheden om de kwaliteit te verhogen, de bitrate te
verlagen en formaten te wijzigen en een aantal van die
truuks maken het verschil tussen goede en slechte
prestaties. Hieronder staan een aantal voorbeelden
beschreven. Eerst een eenvoudige kopie:
%
mencoder invoer.avi -oac copy -ovc copy -o uitvoer.avi
Verkeerde combinaties van commandoregelopties kunnen
resulteren in uitvoerbestanden die zelfs niet af te spelen
zijn door mplayer
. Daarom wordt
aangeraden om het bij de optie
–dumpfile
in
mplayer
te houden als het alleen maar
nodig is een bestand te rippen.
Om invoer.avi
te converteren naar de MPEG4-codec met MPEG3-audio
encodering (audio/lame
is verplicht):
%
mencoder invoer.avi -oac mp3lame -lameopts br=192 \ -ovc lavc -lavcopts vcodec=mpeg4:vhq -o utvoer.avi
Hiermee wordt uitvoer gemaakt die af te spelen is met
mplayer
en
xine
.
invoer.avi
kan worden vervangen door dvd://1 -dvd-device
/dev/dvd
en als root
gedraaid worden om een DVD-titel direct te hercoderen.
Omdat het waarschijnlijk is dat de eerste experimenten niet
direct tevredenstellend zijn, wordt aangeraden een titel
eerst naar een bestand te dumpen en dat als werkbestand te
gebruiken.
De xine videospeler is een project met een brede scope, dat niet alleen tracht een allesomvattende video-oplossing te bieden, maar ook probeert een herbruikbare basisbibliotheek en een modulair uitvoerbaar bestand te maken dat uitgebreid kan worden met plug-ins. Het kan als pakket en port geïnstalleerd worden uit multimedia/xine.
De xine speler heeft nog wat ruwe randjes, maar is zeker goed van start gegaan. In de praktijk heeft xine een snelle CPU met een snelle videokaart of ondersteuning voor de XVideo extensie nodig. De GUI is bruikbaar, maar wat onhandig.
Op het moment van schrijven wordt er geen invoermodule bij xine geleverd waarmee CSS gecodeerde DVD's afgespeeld kunnen worden. Er zijn er die door andere partijen zijn gebouwd die dat type modules wel hebben, maar die zijn niet beschikbaar in de FreeBSD Portscollectie.
Vergeleken met MPlayer, doet xine meer voor de gebruiker, maar tegelijkertijd neemt het wat van de fijnafstellingsmogelijkheden weg. De videospeler xine werkt het beste op XVideo-interfaces.
Standaard start de xine speler op in een grafische gebruikersinterface. Via het menu kan een specifiek bestand geopend worden:
%
xine
Het is ook mogelijk om zonder de GUI direct een bestand af te laten spelen:
%
xine -g -p mijnfilm.avi
De software transcode is geen
speler, maar een verzameling hulpprogramma's voor het
hercoderen van video- en audiobestanden. Met
transcode wordt het mogelijk om
videobestanden samen te voegen, kapotte bestanden te
repareren en commandoregelprogramma's te gebruiken met
stdin/stdout
stream interfaces.
Tijdens het bouwen van de port multimedia/transcode kan een groot aantal opties opgegeven worden en de volgende commandoregel wordt geadviseerd om transcode te bouwen:
#
make WITH_OPTIMIZED_CFLAGS=yes WITH_LIBA52=yes WITH_LAME=yes WITH_OGG=yes \ WITH_MJPEG=yes -DWITH_XVID=yes
De geadviseerde instellingen zijn toereikend voor de meeste gebruikers.
Om de mogelijkheden van transcode
te
illustreren volgt nu een voorbeeld van hoe een DivX-bestand
om te zetten in een PAL MPEG-1-bestand (PAL VCD):
%
transcode -i invoer.avi -V --export_prof vcd-pal -o uitvoer_vcd
%
mplex -f 1 -o uitvoer_vcd.mpg uitvoer_vcd.m1v uitvoer_vcd.mpa
Het resulterende MPEG-bestand,
uitvoer_vcd.mpg
,
is klaar om afgespeeld te worden met
MPlayer. Het kan ook op een CD-R
gebrand worden om er een Video-CD mee te maken. In dat geval
is het nodig om de programma's multimedia/vcdimager en sysutils/cdrdao te
installeren.
Er is een hulppagina voor transcode
,
maar kijk ook op transcode
wiki voor meer informatie en voorbeelden.
Als de twee vergeleken worden, draait
transcode
aanzienlijk langzamer dan
mencoder
, maar is de kans wel groter dat
er een bestand uit komt dat op de meeste spelers afgespeeld
kan worden. MPEG-bestanden die met
transcode
zijn gemaakt, zijn bijvoorbeeld
al afgespeeld op Windows Media®
Player en Apple's
Quicktime®.
De beschikbare videosoftware pakketten voor FreeBSD zijn fors in ontwikkeling. Het is goed mogelijk dat in de nabije toekomst de meeste problemen die hier aan de kaak zijn gesteld, zijn opgelost. Intussen kunnen zij die het hoogst haalbare uit de A/V mogelijkheden voor FreeBSD willen halen, dat het beste doen door wat beschikbaar is bij elkaar te scharrelen uit de beschikbare FAQ's and tutorials en meerdere programma's gebruiken. Het doel van deze paragraaf is de lezer wat richting te geven op dat vlak.
De MPlayer documentatie is technisch erg informatief. Deze documenten kunnen het beste bekeken worden door iemand die veel kennis wil opdoen over video in UNIX®. Op de MPlayer mailinglijst wordt het niet op prijs gesteld als iemand de documentatie niet heeft gelezen, dus het is verstandig RTFM in gedachten te houden alvorens bug rapportages naar ze te mailen.
De xine HOWTO bevat een hoofdstuk over het verbeteren van prestaties, dat op alle spelers van toepassing is.
Tenslotte zijn er nog een aantal veelbelovende applicaties die het proberen waard zijn:
Avifile bestaat ook als port: multimedia/avifile;
Ogle is er ook als port: multimedia/ogle;
multimedia/dvdauthor, een open source pakket voor authoring van DVD content.
All FreeBSD documents are available for download at http://ftp.FreeBSD.org/pub/FreeBSD/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.