编译安装Open Scene Graph 3.4.1时遇到FFmpeg版本兼容错误
解决OSG 3.4.1编译FFmpeg插件的API兼容错误
问题原因
OSG 3.4.1的FFmpeg插件代码基于旧版FFmpeg API开发,而FFmpeg从**2.0版本(对应libavcodec 54)**开始,废弃了AVCodecContext的get_buffer、release_buffer成员,同时移除了avcodec_default_get_buffer、avcodec_default_release_buffer函数,改用get_buffer2及对应新接口。你安装的FFmpeg 2.0/3.0已经属于新版API范围,所以编译报错。
解决方案
方案1:降级FFmpeg到兼容版本
OSG 3.4.1官方适配的是FFmpeg 1.x系列(如1.2.x、1.1.x),下载该版本编译安装后,重新配置OSG的CMake:
# 假设旧版FFmpeg安装在/path/to/ffmpeg-1.2/install cmake -DCMAKE_PREFIX_PATH=/path/to/ffmpeg-1.2/install ../osg-source make -j$(nproc)
方案2:修改OSG代码适配新版FFmpeg
直接修改src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp的第230-231行,替换为版本兼容代码:
#if LIBAVCODEC_VERSION_MAJOR < 54 m_context->get_buffer = avcodec_default_get_buffer; m_context->release_buffer = avcodec_default_release_buffer; #else m_context->get_buffer2 = avcodec_default_get_buffer2; #endif
如果编译时仍然提示avcodec_default_get_buffer2未定义,可以直接注释掉这些手动设置缓冲区的代码——新版FFmpeg默认会使用内置的缓冲区管理逻辑,无需手动赋值。
方案3:强制禁用FFmpeg插件(临时方案)
如果不需要FFmpeg插件功能,可以在CMake配置时禁用:
cmake -DOSG_BUILD_PLUGIN_FFMPEG=OFF ../osg-source make -j$(nproc)
内容的提问来源于stack exchange,提问作者Corentin Salomon
相关产品推荐
相关产品推荐

