Benutze (Python) Gstreamer um Audio zu dekodieren (zu PCM Daten)

8

Ich schreibe eine Anwendung, die die Python-Gstreamer-Bindungen zum Abspielen von Audio verwendet, aber ich versuche jetzt auch, nur Audio zu dekodieren - das heißt, ich möchte Daten mit einem decodebin und erhalten einen rohen PCM-Puffer. Insbesondere möchte ich Teile der Datei inkrementell lesen, anstatt die gesamte Datei im Speicher zu lesen.

Einige spezifische Fragen: Wie kann ich dies mit Gstreamer erreichen? Mit Pygst speziell? Gibt es ein bestimmtes "Sink" -Element, das ich verwenden muss, um Daten aus dem Stream zu lesen? Gibt es eine bevorzugte Möglichkeit, Daten von einem pygst Buffer -Objekt zu lesen? Wie gehe ich vor, um die Rate zu steuern, mit der ich Daten konsumiere (anstatt nur eine "Hauptschleife" einzugeben)?

    
adrian 17.08.2010, 23:23
quelle

1 Antwort

5

Um die Daten zurück in Ihre Anwendung zu bekommen, ist der empfohlene Weg appsink .

Basiert auf einem einfachen Audioplayer wie diesem (und ersetzt den oggdemux / vorbisdec by decodebin & amp; capsfilter mit caps="audio / x-raw-int"), ändere autoaudiosink in appsink und verbinde " neuer-buffer " Signal an eine Python-Funktion + set" emss-signals " zu Wahr. Die Funktion empfängt dekodierte Abschnitte von PCM / int-Daten. Die Geschwindigkeit der Decodierung hängt von der Rate ab, mit der Sie dekodieren und konsumieren können. Da sich das neue Puffersignal im Gstreamer-Thread-Kontext befindet, könnten Sie einfach in dieser Funktion schlafen / warten, um die Dekodiergeschwindigkeit zu steuern oder zu verlangsamen.

    
elmarco 18.08.2010, 09:40
quelle

Tags und Links