GStreamer (gst) je další významný multiplatformní framework založený na grafu filtrů. Využívají jej (některé volitelně) např. přehrávače Amarok, Banshee, Gnash, Kaffeine, Listen, Songbird nebo IM klient Empathy. Je založen na objektovém systému GLib 2. Zásuvné moduly (pluginy) pro tento framework jsou dynamické knihovny a jsou načítány za běhu.
Moduly pro GStreamer
Informace o těchto pluginech jsou cachovány v tzv. registru GStreameru ( ~/.gstreamer-$GST_MAJORMINOR/registry-$ARCH.bin
). Pluginy jsou hledány mj. v adresáři specifikovaném proměnnou prostředíGST_PLUGIN_PATH
a jsou načítány automaticky. Grafu filtrů se zde říká pipeline. Základními stavebními kameny pipeline jsou tzv. elementy (např. dekodér, kodér, demuxer, zdroj dat, video výstup). Elementy jsou obsaženy v pluginech. Plugin po svém načtení typicky zaregistruje několik elementů, které implementuje (např. kodér a dekodér jednoho formátu).
Elementy jsou jednoduše černé krabičky, které mohou mít několik vstupů i výstupů. Například do dekodéru audia tečou na vstupu komprimovaná data a na výstupu z něj vychází dekomprimovaný zvukový signál. Demuxer má na vstupu tok z kontejnerového formátu, na výstupu několik stop ukrytých uvnitř (audio, video). Zdrojové (source) elementy dodávají do pipeline tok tak (např. ze souboru na disku). Cílové (sink) elementy slouží jako koncové body pro toky dat (např. zvuková karta). Elementy se mezi sebou propojují přípojnými body, tzv. pady (z angl. pad). Pady mohou být vstupní (sink) nebo výstupní (source, src)
Data tečou vždy ze zdrojového (src) do cílového (sink). Jaká data elementy přijímají na vstupu nebo jsou schopny produkovat na výstupu určují tzv. datové formáty neboli schopnosti padu (capabilities). Data jsou zde identifikována pomocí typů MIME (např. audio/x-vorbis
, audio/x-raw-float
). Na základě těchto schopností (datových formátů) je framework schopen propojovat elementy automaticky. Součástí frameworku jsou také nástroje pro příkazovou řádku –gst-inspect
a gst-launch
.
Příkazgst-inspect
slouží k zjišťování informací o pluginech a elementech. Bez parametrů vypíše jejich přehled. Pokud se mu jako parametr předá název pluginu či elementu, vypíše o něm podrobné informace. Příkazgst-launch
slouží k sestavení a spuštění pipeline z příkazového řádku. Veškerou dokumentaci ke GStreameru lze nalézt na oficiálních stránkách.
Základy použití
Příkaz gst-inspect
bez parametrů vypíše dohromady seznam všech pluginů a elementů.
gst-inspect-1.0
Tento seznam je ve formátu – „plugin: element: popis elementu.“ Jeden z řádků výstupu může být například element alsasrc
v pluginu alsa
.
alsa: alsasrc: Audio source (ALSA)
Bližší informace se získají předáním jména pluginu nebo elementu jako parametru příkazu. Následující příkaz vypíše informace o pluginu.
gst-inspect-1.0 alsa
Výstup bude podobný následujícímu (zkráceno).
Plugin Details: Name: alsa Description: ALSA plugin library Filename: /usr/lib64/gstreamer-0.10/libgstalsa.so Version: 0.10.35 License: LGPL alsasink: Audio sink (ALSA) alsasrc: Audio source (ALSA) alsamixer: Alsa mixer
Informace o elementu lze vypsat, předá-li se jako parametr jeho název.
gst-inspect-1.0 alsasrc
Příkaz vypíše následující (zkráceno).
Factory Details: Long name: Audio source (ALSA) Class: Source/Audio Description: Read from a sound card via ALSA Pad Templates: SRC template: 'src' Availability: Always Capabilities: audio/x-raw-int endianness: { 1234, 4321 } signed: { true, false } width: 32 depth: 32 rate: [ 1, 2147483647 ] channels: [ 1, 2147483647 ] Element Properties: name : The name of the object flags: readable, writable String. Default: null Current: "alsasrc0" device : ALSA device, as defined in an asound configuration file flags: readable, writable String. Default: "default" Current: "default"
Ve výpisu se objeví popis a třída elementu (zde Source/Audio
), výstupní (src) a vstupní (sink) pady a jejich formáty dat (zde audio/x-raw-int
u zdrojového padu), vlastnosti (properties) elementu (zde name
a device
) apod.
Na obrázku vidíte výstup jednoduché pipeline sestávající z elementůvideotestsrc
a ximagesink
.
Sestavení pipeline
Příkaz gst-launch
slouží k sestavení a spuštění pipeline z příkazové řádky. Jako parametr obdrží textový řetězec popisující graf filtrů. Jednotlivé elementy jsou zde propojovány vykřičníkem. Vlastnosti elementů mohou být nastavovány za názvem elementu (ve formátu vlastnost=hodnota
), oddělují se mezerou.
Za jménem elementu lze pomocí tečky oddělit jméno padu, kterého se spojení týká. Mezi vykřičníky lze také zapsat datové formáty (capabilities), přes které se má spojení omezit (filtrovat). Schopnosti se skládají z typu MIME následovaného čárkou oddělovanými vlastnostmi. Jednotlivé datové formáty se od sebe oddělují středníky.
Nejjednodušším příkladem bude pipeline sestávající z elementu playbin
. Ve skutečnosti se nejedná o obyčejný element, ale o koš (angl. bin) elementů.
gst-launch-1.0 playbin uri=file:///tmp/clock.avi
Příkaz vytvoří pipeline, kterou ihned spustí. Spuštěním se otevře okno, ve kterém se zobrazuje přehrávané video. Do zvukového subsystému je přitom přehráván zvuk. Uvnitř elementu playbin
byl automaticky podle přehrávaného souboru vytvořen vhodný graf filtrů.
Následující pipeline sestává z elementu videotestsrc
, který generuje testovací obraz, a elementu ximagesink
, který vytvoří okno (X Window System). Výsledek je zobrazen na obrázku výše.
gst-launch-1.0 videotestsrc ! ximagesink
Následující příkaz sestaví pipeline z elementůfilesrc
(čte data ze souboru),decodebin
(sestaví v sobě vhodný graf pro dekódování),videoconvert
(umožňuje konvertovat barevné modely) a ximagesink
. Výstup bude stejný jako v případě použití elementu playbin
.
gst-launch-1.0 filesrc location=/tmp/clock.avi ! decodebin ! videoconvert ! ximagesink
Demuxování a dekódování
Dalším krokem je ruční zařazení elementů demuxování kontejneru AVI a dekódování videostopy (zde formát Microsoft RLE). O demuxování se postará element avidemux
. Pro dekódování byl použit elementavdec_msrle
z balíčku gst-ffmpeg-plugins.
gst-launch-1.0 filesrc location=/tmp/clock.avi ! avidemux ! avdec_msrle ! videoconvert ! ximagesink
(Obrázky pocházejí z projektu GStreamer.)