Um besser zu verstehen wie Elemente im Gstreamer funktionieren, muss man noch ein paar Worte über SRC und SINK sagen.
Die meisten Elemente haben Eingang und Ausgang. Es kommt dabei ständig zur Verwirrungen: was Ausgang (SRC) und was Eingang (SINK) ist. Am einfachsten ist es im bezug zu anderen Element zu verstehen, hier ist ein Beispiel:
[Element 1]--src-->>--sink--[Element 2]--src-->>--sink--[Element 3]
Und so weiter. Nur ein passende SINK kann zu einem SRC eingeschlossen. Lasst uns pulsesrc nehmen. Dieses Element hat nur SRC (natürlich im begrenzten Sinne für Gstreamer). Jetzt schauen wir in die Beschreibung von pulsesrc:
gst-inspect pulsesrc
Factory Details:
Long name: PulseAudio Audio Source
Class: Source/Audio
Description: Captures audio from a PulseAudio server
Author(s): Lennart Poettering
Rank: primary (256)
...
Pad Templates:
SRC template: 'src'
Availability: Always
Capabilities:
audio/x-raw-int
endianness: { 1234, 4321 }
signed: true
width: 16
depth: 16
rate: [ 1, 2147483647 ]
channels: [ 1, 32 ]
Die wichtige Teil für uns fängt mit den Worten SRC template an. Hier steht, welche Möglichkeiten/Formate dieses Element ausgeben kann. Ein davon ist audio/x-raw-int.
Der SINK von vorbisenc akteptiert nur audio/x-raw-float. Wenn pulsesrc nichts anderes können würde, könnten wir die beide auch nicht verbinden. Dafür brauchen wir ein Element welches audio/x-raw-int auf audio/x-raw-float umwandeln kann. Der heißt audioconvert. In unserem Befehl wird so aussehen:
gst-launch-0.10 pulsesrc ! audioconvert ! vorbisenc ! ...
Nun, zum basteln gebe euch ein paar Elemente. Dabei gibt es auch nicht passende ;D
postproc_tmpnoise, pulsesrc, pulsesink, filesink, oggmux, matroskamux, vorbisenc, speexenc
Bin gespannt von euch wieder zu hören.
Noch keine Kommentare