Multimediální frameworky: GStreamer jako základ mnoha přehrávačů

22. 1. 2025
Doba čtení: 4 minuty

Sdílet

Autor: Depositphotos
GStreamer je multiplatformní framework založený na grafu filtrů, využívaný v přehrávačích jako Amarok či Banshee. S dynamickými pluginy a objekty GLib 2 umožňuje efektivní zpracování multimédií.

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 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 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 .

docker + kubernetes školení s dotací tip

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.)

Neutrální ikona do widgetu na odběr článků ze seriálů

Zajímá vás toto téma? Chcete se o něm dozvědět víc?

Objednejte si upozornění na nově vydané články do vašeho mailu. Žádný článek vám tak neuteče.


Autor článku

Autor vystudoval Fakultu informačních technologií VUT v Brně, kde nyní pracuje jako vědecký pracovník. Zajímá se o multimédia a na svých strojích používá výhradně Gentoo Linux.