2016-05-28 9 views
1

Ich möchte eine Datei speichern, die AAC-Audiorahmen hat,Speichern AAC Audio und Abrufen von

dass für i die unten Pipeline verwendet,

gst-launch-1.0 filesrc location=Test_44100Hz_2ch_s16le.wav ! "audio/x-raw,rate=44100,format=s16le,channels=2" ! audioparse format=raw raw-format=s16le rate=44100 channels=2 ! faac ! aacparse ! queue ! filesink location=a1 

Während erneut die Datei lesen Sie weiter unten Pipeline pulsesink mit ,

gst-launch-1.0 filesrc location=a1 ! aacparse ! faad ! audioconvert ! audioresample ! pulsesink 

ich unten Fehler erhalte, habe ich GST_DEBUG = 3, aber ich bin nicht in der Lage, die Lösung zu finden.

0:00:00.031924804 3379  0x2231d60 WARN     basesrc gstbasesrc.c:3483:gst_base_src_start_complete:<filesrc0> pad not activated yet 
Pipeline is PREROLLING ... 
0:00:00.033044700 3379  0x2231050 WARN    baseparse gstbaseparse.c:3255:gst_base_parse_loop:<aacparse0> error: No valid frames found before end of stream 
ERROR: from element /GstPipeline:pipeline0/GstAacParse:aacparse0: No valid frames found before end of stream 
Additional debug info: 
gstbaseparse.c(3255): gst_base_parse_loop(): /GstPipeline:pipeline0/GstAacParse:aacparse0 
ERROR: pipeline doesn't want to preroll. 

Kann mir jemand helfen, um dies zu lösen? Ich muss AAC-Audiorahmen speichern und diese Datei als AAC-Audiostream streamen.

+0

Ich denke, Sie brauchen einige Container, aac ist nur Codec - versuchen mp4mux .. – nayana

Antwort

0

Das ist es, getestet Arbeits:

gst-launch-1.0 filesrc location=WAV_44_16bit.wav ! decodebin ! audioconvert ! queue ! voaacenc ! aacparse ! queue ! mp4mux ! filesink location=aac.mp4 


gst-launch-1.0 filesrc location=aac.mp4 ! decodebin ! audioconvert ! audioresample ! alsasink 

Im Container sind Metadaten-Informationen gespeichert .. ohne sie der Decoder nicht weiß, wie die Daten zu verarbeiten.

+0

ja, das weiß ich. Wenn wir Mux verwenden, kann es einfach sein und es wird funktionieren. Aber ich möchte die Daten nicht muxen, ich möchte nur verschlüsselte Daten speichern, ohne Muxen. Kann es möglich sein? –

+0

@PrasanthKumarArisetti Ja, aber Sie müssen auch die Metadaten irgendwo speichern .. Ich habe das nie getan .. Warum können Sie nicht die mp4 verwenden? Wenn Sie mp4 verwenden, werden die aac Daten nur von mp4 umschlossen. Es gibt keine Änderung der aac Daten. – nayana

+0

Auch wenn Sie die Metadaten weitergeben könnten, könnte es nur für Low Complexity Streams funktionieren, so wie SSR fast die Verwendung von a Container. –

0

AAC-Audioströme erfordern einen Behälter, um innerhalb gstreamer

für die Decodierer-Initialisierung nützlich zu sein, es ist notwendig, Abtastfrequenz und Audio-Objekt zu kennen. In gstreamer können wir diese Metadaten nicht direkt an den Parser oder den Decoder weitergeben. Der Parser sammelt diese Daten stattdessen aus dem mp4-Header, dann erbt der Codierer die Rahmenstruktur/Größe und Abtastrate. Dies ist also ein Mangel in entweder aacparse (Parser) oder avdec_aac/faad (Dekoder), von denen keine Parameter zur Angabe der Bildgröße einer Raw-Datei, die oben genannten Metadaten zur Verfügung gestellt. Davon abgesehen habe ich keinen zwingenden Grund gefunden, warum jemand das tun müsste. Ich habe versucht, es zu tun, bevor ich entdeckte, dass der AAC einfach in einen MP4 (mp4mux) oder einen anderen Container gemuxed werden musste, um zu arbeiten und tragbar zu sein. Der Container/Rahmen fügt dem Stream nur eine kleine Datenmenge hinzu.

Verwandte Themen