首页 > 解决方案 > 为什么在尝试使用 libavcodec.57 和 libopus-1.2~alpha2-1 解码音频时出现 SIGSEGV?

问题描述

我正在使用 FFMPEG libavcodec 的函数avcodec_decode_audio4()解码音频。在 Windows 和 Ubuntu 18.04 上一切正常,但是当我尝试在 Debian 9 上运行相同的应用程序时收到分段错误。我用 gdb 调试了我的代码,它显示了这个结果:

Thread 24 "SDLAudioDev2" received signal SIGSEGV, Segmentation fault.
[Switching to Thread 0x7ffff7fea700 (LWP 1657)]
0x00007fffecdd6eff in ?? () from /usr/lib/x86_64-linux-gnu/libopus.so.0
(gdb) bt
#0  0x00007fffecdd6eff in ?? ()
   from /usr/lib/x86_64-linux-gnu/libopus.so.0
#1  0x00007fffecde0b18 in ?? ()
   from /usr/lib/x86_64-linux-gnu/libopus.so.0
#2  0x00007fffece04ac1 in ?? ()
   from /usr/lib/x86_64-linux-gnu/libopus.so.0
#3  0x00007fffece05b5b in ?? ()
   from /usr/lib/x86_64-linux-gnu/libopus.so.0
#4  0x00007fffece0e87e in ?? ()
   from /usr/lib/x86_64-linux-gnu/libopus.so.0
#5  0x00007fffece0eba7 in opus_multistream_decode ()
   from /usr/lib/x86_64-linux-gnu/libopus.so.0
#6  0x00007ffff4f8a235 in ?? ()
   from /usr/lib/x86_64-linux-gnu/libavcodec.so.57
#7  0x00007ffff51893fd in avcodec_decode_audio4 ()
   from /usr/lib/x86_64-linux-gnu/libavcodec.so.57
#8  0x00007ffff5189e78 in ?? ()
   from /usr/lib/x86_64-linux-gnu/libavcodec.so.57
#9  0x00007ffff518f098 in avcodec_send_packet ()

似乎数据竞争出现在某个地方。我试图删除avcodec_decode_audio4()并使用avcodec_send_packet()avcodec_receive_frame()函数,但是在 FFMPEG ver.3.2.10 函数的 libavcodec.57 中,函数avcodec_send_packet()调用avcodec_decode_audio4()并且问题再次出现。

有人可以帮我解决我需要更改的内容以使其全部与 Debian 9 软件包的版本兼容吗?

在 Windows 我有 libavcodec.58,在 Ubuntu 18.04 libavcodec.57 ver.3.4.8

在 Debian 9 上,我有 libavcodec.57 ver.3.2.15

标签: ffmpegsegmentation-faultdebianlibavcodecopus

解决方案


推荐阅读