[[Vorlage(Getestet, precise)]] {{{#!vorlage Wissen [:Pakete_installieren: Installation von Programmen] [:Programme_starten: Ein Programm starten] [:Terminal: Ein Terminal öffnen] }}} [[Inhaltsverzeichnis(1)]] [[Bild(./gstreamer_logo.png, align=left)]] [http://gstreamer.freedesktop.org GStreamer] {en} ist ein Multimedia-Framework, welches das Abspielen, Kodieren, Dekodieren etc. von Audio- und Videodateien ermöglicht. Anders als der Name vermuten lässt, ist GStreamer desktopunabhängig. Zwar ist GStreamer seit [:GNOME:] 2.2 ein fester Bestandteil dieser Desktopumgebung, funktioniert aber auch genauso problemlos mit anderen Desktopumgebungen wie [:KDE:] oder [:Xfce:]. Viele Audio- und Videoplayer können die Fähigkeiten von GStreamer nutzen, so z.B. [:Totem:], [:Rhythmbox:] und [:Banshee:], oder setzen dieses statt eigener Wiedergabe-Routinen ein. Unter Ubuntu wird GStreamer in der Version 0.10.36 eingesetzt, während KDE auf [:Phonon:] setzt. Ab [:Raring:Ubuntu 13.10] steht GStreamer 1.x zur Verfügung. = Konzept von GStreamer = GStreamer ist prinzipiell modular aufgebaut und arbeitet dreistufig. Es gibt die Eingabe, welche GStreamer "Source" nennt, den Filter / Transformer (z.B. den Ogg Vorbis Decoder zum Abspielen von '''.ogg'''-Audio-Dateien) und die Ausgabe, welche GStreamer "Sink" nennt. Alle drei Stufen werden über Plugins realisiert und sind somit grundsätzlich (beliebig) erweiterbar. Die Blöcke sind über so genannte [#Pipeline Weiterleitungen (Pipelines)] verbunden. = Installation = GStreamer ist in der Standardinstallation von Ubuntu enthalten, kann ansonsten aber über das folgende Paket installiert [1] werden: {{{#!vorlage Paketinstallation libgstreamer0.10-0 }}} Empfehlenswert sind weiterhin noch die Pakete: {{{#!vorlage Paketinstallation gstreamer0.10-tools gnome-media, enthält [#Nutzung gstreamer-properties] }}} Um später Multimedia-Dateien abzuspielen bzw. zu kodieren, benötigt man noch ein entsprechendes Plugin, welches den konkreten Decoder / Encoder enthält. Die einzelnen GStreamer-Plugins sind im Artikel [:Codecs:] beschrieben. Codecs für GStreamer, die lizenzrechtlich geschützt sind, können u.a. im [:Codecs#Fluendo:Fluendo Webstore] gekauft und heruntergeladen werden. = Nutzung = Nutzt man ein Audio- oder Videoprogramm, welches GStreamer im Hintergrund (Backend) einsetzt, so verwendet man GStreamer, ohne direkt darauf zuzugreifen. Durch den Aufruf des Hilfsprogramms '''gstreamer-properties''' [2] kann man jedoch die Vorgabe für die Eingabe (Source) und Ausgabe (Sink) getrennt für Audio und Video mittels einer grafischen Benutzeroberfläche auswählen. Möchte man wissen, welche Module / Plugins für GStreamer installiert sind, so ruft man im Terminal [3] folgenden Befehl auf: {{{#!vorlage Befehl gst-inspect-0.10 }}} Je nach Anzahl der installierten Erweiterungen kann die Ausgabe unter Umständen sehr lang sein. Daher bietet sich an, die Ausgabe durch [:Shell/grep:grep] filtern zu lassen [2], z.B.: {{{#!vorlage Befehl gst-inspect-0.10 | grep src # gibt alle installierten Sources aus gst-inspect-0.10 | grep sink # gibt alle installierten Sinks aus gst-inspect-0.10 | grep encode # gibt alle installierten Encoder aus gst-inspect-0.10 | grep decode # gibt alle installierten Decoder aus gst-inspect-0.10 | grep play # gibt alle installierten GStreamer-eigenen Player aus }}} Man kann GStreamer auch ohne grafische Benutzeroberflächen nutzen, also ohne die oben genannten Audio- / Videoplayer. Dazu dient der Befehl '''`gst-launch-0.10`''', mit dem sich (fast) beliebige Weiterleitungen bauen lassen. Hier ein einfaches Beispiel: Es soll die Datei '''musik.ogg''' wiedergegeben werden, welche im [:Homeverzeichnis:] liegt. Diese lässt sich mit folgendem Befehl realisieren: {{{#!vorlage Befehl gst-launch-0.10 filesrc location=~/musik.ogg ! vorbisdec ! alsasink }}} * `filesrc location=` ist der Pfad inkl. Dateiname * `vorbisdec` ist der zu benutzende Decoder * `alsasink` die Ausgabe Das Ausrufezeichen '''`!`''' signalisiert GStreamer, das als nächstes ein neues Element der Pipeline definiert wird. Kennt man den Codec der abzuspielenden Datei nicht (z.B. bei Videos), so kann man als Dekoder auch '''`decodebin`''' einsetzen. Dann versucht GStreamer, anhand des Dateiheaders den Codec zu "erraten" und benutzt - sofern installiert - den passenden Decoder. Geht es um das reine Abspielen von Audio- bzw. Videodateien, so kann man auch folgenden Befehl nutzen: {{{#!vorlage Befehl gst-launch-0.10 playbin uri=file:///pfad/zur/datei/music.ogg }}} Wichtig ist dabei, dass immer der volle Pfad angegeben wird (auch, wenn man sich im Verzeichnis mit der Datei befinden sollte) und die Einleitung mit '''`uri=file://`'''. Die angegebenen Beispiele funktionieren im Prinzip genau so mit Videodateien. Darüber hinaus lassen sich mit dem Befehl '''`gst-launch-0.10 ...`''' noch viele andere Dinge realisieren, z.B. Videos umkodieren, Muxen / Demuxen, CDs rippen etc. Die Weiterleitungen können dabei (fast) beliebig komplex sein. Einige Beispiele bietet hier auch die [:man:Manpage] zu gst-launch. Im Vergleich zu "vollwertigen" Audio- / Videoplayern etc. ist GStreamer an sich unkomfortabler, da gst-launch z.B. keine Parameter / Optionen für die Decoder / Encoder kennt. Allerdings sind die bei GStreamer mitgelieferten Werkzeuge auch eher zum Testen bzw. schnellen Abspielen auf der Kommandozeile gedacht als in "Konkurrenz" zu den "vollwertigen" Playern zu stehen. Außerdem kann gst-launch gut in (Shell-) Skripten eingesetzt werden. [[Bild(./totem_mit_compiz_manipulation.png, 200, align=right)]] = Konfiguration = Wenn man möchte, dass das Video auch dann angezeigt wird, wenn es zum Beispiel von Compiz umgeleitet wird, muss man den [:gconf-editor:] (unter [:Unity:] stattdessen [:GNOME_Konfiguration/dconf:dconf-editor]) starten und den Schlüssel ''"/system/gstreamer/0.10/default/videosink"'' in ''"ximagesink"'' ändern. Dann werden Videos, die von Totem oder anderen Playern, die GStreamer benutzen, umgeleitet, sodass man sie auch sehen kann, wenn das Fenster manipuliert wird. = Pipeline = Eine Gstreamer-Pipeline besteht aus mehreren hintereinander geschalteten Elementen. Ein Signal einer Anwendung durchläuft diese und wird an den gewünschten Empfänger (z.B. die Soundkarte) übermittelt. Die Anwendungsmöglichkeiten sind flexibel. Eine Übersicht bietet die ausführliche Dokumentation des Frameworks. == Optionen == {{{#!vorlage Tabelle <-2 tablestyle="width: 97%;" rowclass="titel"> Optionen +++ Option Beschreibung +++ `audio/x-raw-int` Audiodatei (nicht verändern) +++ `rate=44100,channels=2` Sample-Rate der Audiodatei mit 44100kHz, Stereo (nicht verändern) +++ `! lame name=enc` Verwendet den MP3 Codec (siehe [:LAME:]) +++ `mode=` Encoder Modus (`0`: Stereo; `1`: Joint Stereo; `2`: Dual Channel; `3`: Mono; `4`: Auto) +++ `quality=` Qualität des verwendeten Algorithmus zum encoden ( von `0`-`9`, wobei `0` am besten ist, `9` am schlechtesten) +++ `vbr=` Werte von 0 - 4, wobei `0` kein VBR heißt, `2` ein älterer Algorithmus ist, `3` VBR Average Bitrate und `4` der neue/schnelle LAME VBR-Modus (empfohlen) +++ `vbr-quality=` VBR-Bitrate. `0` ist am höchsten (245-285 kbps), `9` am niedrigsten (45-85 kbps). Empfohlen wird `2` (170 - 210 kbps) +++ `preset= {1001, 1002, 1003, 1006}` LAME-Presets: `1001` = Standardeinstellung - entspricht `vbr-quality=2`, `1002` entspricht `vbr-quality=0`, `1003` entspricht 320KB-CBR, `1006` entspricht `vbr-quality=4` +++ `bitrate=` Bitrate (nur nötig, falls `vbr=0`). Empfohlener Wert: `192` +++ `! xingmux` Diese Option sollte nicht verändert werden, damit die korrekten Informationen zur variablen Bitrate und Titellänge in die MP3-Datei geschrieben werden. +++ `! id3v2mux` Zum Schreiben von ID3v2.4 Tags (nicht verändern) }}} === Beispiele === ==== MP3s mit einer festen Bitrate von 192 kbps erstellen ==== {{{ audio/x-raw-int,rate=44100,channels=2 ! lame name=enc mode=1 quality=2 vbr=0 bitrate=192 ! xingmux ! id3v2mux }}} ==== MP3s mit VBR ~190kbps erstellen ==== {{{ audio/x-raw-int,rate=44100,channels=2 ! lame name=enc mode=1 quality=2 vbr=4 vbr-quality=2 ! xingmux ! id3v2mux }}} In der Diskussion zum Fehlerbericht [bug:195483:] findet sich folgende alternative Variante. Hintergrund sind Probleme mit der Bibliothek '''liblame'''. {{{ audio/x-raw-int,rate=44100,channels=2 ! lamemp3enc name=enc target=0 quality=2 ! xingmux ! id3v2mux }}} [https://bugs.launchpad.net/ubuntu/+source/sound-juicer/+bug/195483/comments/63 Quelle] {en} = Links = * [:Codecs#Fluendo:kommerzielle Codecs für GStreamer kaufen] * [http://gstreamer.freedesktop.org/documentation/ Dokumentation] {en} - die offizielle GStreamer Dokumentation * [http://gstreamer.freedesktop.org/apps/ Anwendungsliste] {en} - welche Anwendungen GStreamer nutzen * [http://gstreamer.freedesktop.org/planet/ Blog] {en} * [http://lac.linuxaudio.org/2010/download/GStreamerAudioApps.pdf GStreamer Audio Applications / Stefan Kost] {en} {dl} * [http://linux.die.net/man/1/gst-launch-0.10 Manpage] {en} - die Manpage zu gst-launch online und mit farbigen Hervorhebungen * [http://drice.org/2009/02/09/radiostreams-mitschneiden/ Audiostreams aufnehmen] {de} mit Hilfe von GStreamer und [:PulseAudio:] * [http://www.flumotion.net/ Flumotion] {de} - Streamingserver auf Basis von GStreamer # tag: Multimedia, Video