GStreamer 声称 avdec_aac 丢失

GStreamer claims avdec_aac is missing

我在创建可以解码 aac 流的 gstreamer 管道时遇到问题。我使用 decodebin 作为解码器元素,以使事情尽可能简单。当我推入 aac 流时,出现以下错误:

0:00:00.243017793 27632 0x556cf6291de0 INFO              GST_STATES gstelement.c:2675:gst_element_continue_state:<avdec_aac0> completed state change to PAUSED
0:00:00.243028893 27632 0x556cf6291de0 INFO              GST_STATES gstelement.c:2575:_priv_gst_element_state_changed:<avdec_aac0> notifying about state-changed READY to PAUSED (VOID_PENDING pending)
0:00:00.243047154 27632 0x556cf6180830 INFO                 GST_BUS gstbus.c:588:gst_bus_timed_pop_filtered:<bus1> we got woken up, recheck for message
0:00:00.243865043 27632 0x556cf6291de0 INFO                   libav :0:: Audio object type 0
0:00:00.243878963 27632 0x556cf6291de0 INFO                   libav :0::  is not implemented. Update your FFmpeg version to the newest one from Git. If the problem still occurs, it means that your file has a feature which has not been implemented.
0:00:00.243901033 27632 0x556cf6291de0 WARN               decodebin gstdecodebin2.c:2523:connect_pad:<audiodecoder> Couldn't set avdec_aac0 to PAUSED

...

0:00:00.246185892 27632 0x556cf6291de0 WARN               decodebin gstdecodebin2.c:4678:gst_decode_bin_expose:<audiodecoder> error: no suitable plugins found:
Couldn't set avdec_aac0 to PAUSEDCouldn't set avdec_aac_fixed0 to PAUSEDCouldn't set faad0 to PAUSED

0:00:00.246190073 27632 0x556cf6180830 INFO                 GST_BUS gstbus.c:588:gst_bus_timed_pop_filtered:<bus1> we got woken up, recheck for message
0:00:00.246205032 27632 0x556cf6291de0 INFO        GST_ERROR_SYSTEM gstelement.c:2140:gst_element_message_full_with_details:<audiodecoder> posting message: Your GStreamer installation is missing a plug-in.
0:00:00.246253922 27632 0x556cf6291de0 INFO        GST_ERROR_SYSTEM gstelement.c:2167:gst_element_message_full_with_details:<audiodecoder> posted error message: Your GStreamer installation is missing a plug-in.

我确认 gstreamer 插件是通过以下方式安装的:

gst-inspect-1.0.exe  | grep aac

(gst-inspect-1.0:13248): GStreamer-WARNING **: 14:46:08.791: Failed to load plugin 'C:\gstreamer.0\msvc_x86_64\lib\gstreamer-1.0\gstwavpack.dll': The specified module could not be found.
This usually means Windows was unable to find a DLL dependency of the plugin. Please check that PATH is correct.
You can run 'dumpbin -dependents' (provided by the Visual Studio developer prompt) to list the DLL deps of any DLL.
There are also some third-party GUIs to list and debug DLL dependencies recursively.
audioparsers:  aacparse: AAC audio stream parser
libav:  avdec_aac: libav AAC (Advanced Audio Coding) decoder
libav:  avdec_aac_fixed: libav AAC (Advanced Audio Coding) decoder
libav:  avdec_aac_latm: libav AAC LATM (Advanced Audio Coding LATM syntax) decoder
libav:  avenc_aac: libav AAC (Advanced Audio Coding) encoder
libav:  avmux_adts: libav ADTS AAC (Advanced Audio Coding) muxer (not recommended, use aacparse instead)
mediafoundation:  mfaacenc: Media Foundation Microsoft AAC Audio Encoder MFT
typefindfunctions: audio/aac: aac, adts, adif, loas
voaacenc:  voaacenc: AAC audio encoder

我在 windows 和 linux 中都遇到了这个问题。在 windows 我安装了 gstreamer 的运行时和开发版本的完整安装,我使用的是从 ffmpeg 网站链接到的最新 5.0 完整版本。

在 ubuntu 我完成了:

sudo apt-get install libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly gstreamer1.0-libav libgstrtspserver-1.0-dev libges-1.0-dev libssl-dev ffmpeg faad

我还是空着呢

我错过了什么?

这似乎是我错误地从传入的 RTMP 数据包中解包 FLV 数据造成的。当我打开音频 FLV 标签时,我没有打开 AACAAUDIODATA.AACPacketType 字节。因此,我的序列头和音频数据包前面加上了无法读取的 01 字节。对此的提示是看到 libav :0:: Audio object type 0 以及比较日志输出中 gstreamer 上限中的编解码器数据与执行直接 gstreamer filesrc 管道。