我想存储一个有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我收到以下错误,我使用了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.有人能帮我解决这个问题吗?我需要存储AAC音频帧,并需要将该文件作为AAC音频流。
发布于 2016-05-30 06:51:59
就是这样,测试工作:
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在容器中存储了元数据信息。没有它们,解码器就不知道如何处理数据。
发布于 2017-11-17 19:23:08
AAC音频流需要一个容器才能在gstreamer中使用
对于解码器初始化,需要知道采样频率和音频对象。在gstreamer中,我们无法将此元数据直接传递给解析器或解码器。解析器从mp4报头收集数据,然后编码器继承帧结构/大小和采样率。因此,无论是解析器(解析器)还是avdec_aac/faad(解码器),都没有公开参数来指定原始文件(上述元数据)的帧大小。话虽如此,我还没有找到一个令人信服的理由来解释为什么会有人需要这样做。在我发现aac只需要被屏蔽到一个MP4(mp4mux)或另一个容器中才能工作并具有可移植性之前,我发现自己正在尝试这样做。容器/框架只向流添加少量数据。
https://stackoverflow.com/questions/37496912
复制相似问题