Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Gstreamer 存储AAC音频并检索_Gstreamer_Pulseaudio - Fatal编程技术网

Gstreamer 存储AAC音频并检索

Gstreamer 存储AAC音频并检索,gstreamer,pulseaudio,Gstreamer,Pulseaudio,我想存储一个包含AAC音频帧的文件 为此,我使用了下面的管道 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=

我想存储一个包含AAC音频帧的文件

为此,我使用了下面的管道

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
gst-launch-1.0 filesrc location=a1 ! aacparse ! faad ! audioconvert ! audioresample ! pulsesink
在使用下面的管道再次读取该文件以pulsesink时

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
gst-launch-1.0 filesrc location=a1 ! aacparse ! faad ! audioconvert ! audioresample ! pulsesink
我收到以下错误,我使用了GST_DEBUG=3,但我无法找到解决方案

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.
0:00:00.031924804 3379 0x2231d60 WARN basesrc gstbasesrc.c:3483:gst\u base\u src\u start\u complete:pad尚未激活
管道正在预滚。。。
0:00:00.033044700 3379 0x2231050 WARN BASEPRASE GSTBASEPRASE.c:3255:gst_base_parse_循环:错误:在流结束之前未找到有效帧
错误:来自元素/GstPipeline:pipeline0/GstAacParse:aacparse0:在流结束之前未找到有效帧
其他调试信息:
gstbaseparse.c(3255):gst_base_parse_loop():/GstPipeline:pipeline0/GstAacParse:aacparse0
错误:管道不想预卷。

有人能帮我解决这个问题吗?我需要存储AAC音频帧,并需要将该文件流式传输为AAC音频流。

就是这样,测试工作:

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

容器中存储了元数据信息。。没有它们,解码器就不知道如何处理数据。

AAC音频流需要一个容器,以便在gstreamer中有用。


对于解码器初始化,需要知道采样频率和音频对象。在gstreamer中,我们无法将此元数据直接传递给解析器或解码器。解析器从mp4报头收集这些数据,然后编码器继承帧结构/大小和采样率。因此,这是aacparse(解析器)或avdec_aac/faad(解码器)中的一个缺陷,它们都没有公开参数来指定原始文件的帧大小,即上述元数据。尽管如此,我还没有找到一个令人信服的理由来解释为什么有人需要这么做。在我发现aac只需要被多路复用到一个MP4(mp4mux)或另一个容器中即可工作并可移植之前,我发现自己正在尝试这样做。容器/帧仅向流中添加少量数据。

我认为您需要一些容器,aac只是编解码器-试试mp4mux..是的,我知道这一点。如果我们使用多路复用器,它会很容易,而且会工作。但我不想对数据进行多路复用,我只想存储编码数据,而不进行多路复用。这可能吗?@PrasanthKumarArisetti是的,但您还必须将元数据存储在某个地方。。我从来没有这样做过。。你为什么不能用mp4?使用mp4时,aac数据仅由mp4包装。。aac数据没有变化。即使您可以传递元数据,它也可能只适用于低复杂度的流,例如SSR几乎要求使用容器。