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
字节。因此,我的序列头和音频数据包前面加上了无法读取的 0
或 1
字节。对此的提示是看到 libav :0:: Audio object type 0
以及比较日志输出中 gstreamer 上限中的编解码器数据与执行直接 gstreamer filesrc
管道。
我在创建可以解码 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
字节。因此,我的序列头和音频数据包前面加上了无法读取的 0
或 1
字节。对此的提示是看到 libav :0:: Audio object type 0
以及比较日志输出中 gstreamer 上限中的编解码器数据与执行直接 gstreamer filesrc
管道。