最近使用mediasoup做项目时,需要使用h.264编解码支持,于是按照网上的一些方法编译,遇到一些问题如下,开发环境为vs2019,webrtc版本为m84:
1.See: bugs.webrtc.org/9213#c13.
解决方法:
将 modules\video_coding\codecs\h264\目录下的 h264_decoder_impl.h、h264_encoder_impl.h、h264_color_space.h 几个文件中的#error "See: bugs.webrtc.org/9213#c13." 注释掉。
2.C2059 error "string"
解决方法:
注释掉\third_party\ffmpeg\libavcodec\pcm.c的最后一行,原因是PCM_VIDC这个标志未定义
3.ffmpeg_internal.lib(pcm.obj) : error LNK2001: 无法解析的外部符号 avpriv_emms_asm(不影响最终webrtc库的生成)
解决方法:替换ffmpeg文件,x86版本无此问题,x64才会出现,原因是x64不支持大多数汇编指令,ffmpeg里面有汇编代码,用clang就没那个问题,但是clang编译的vc不能引用
亲测替换thirdparty/ffmpeg下文件x64可编译引用m84下替换的ffmpeg源码
我的编译脚本如下:
gn gen out/x64DebugVC --args="is_debug=true enable_iterator_debugging=true is_clang=false is_component_build=false rtc_include_tests=false rtc_use_h264=true proprietary_codecs=true ffmpeg_branding=\"Chrome\" rtc_enable_protobuf=false use_rtti=true treat_warnings_as_errors=false target_cpu=\"x64\"" --ide=vs2019
ninja -C out/x64DebugVC
gn gen out/x64ReleaseVC --args="is_debug=false enable_iterator_debugging=true is_clang=false is_component_build=false rtc_include_tests=false rtc_use_h264=true proprietary_codecs=true ffmpeg_branding=\"Chrome\" rtc_enable_protobuf=false use_rtti=true treat_warnings_as_errors=false target_cpu=\"x64\"" --ide=vs2019
ninja -C out/x64ReleaseVC
主要参数为is_clang=false,不能用clang,否则vc不能引用webrtc.lib,
rtc_use_h264=true proprietary_codecs=true ffmpeg_branding=\"Chrome\",开启编译h.264
treat_warnings_as_errors=false,有些编译出现警告
在使用VS2019进行WebRTC m84版本的项目开发时,遇到了h.264编解码支持的相关问题。首先,由于bug.webrtc.org/9213导致的编译错误,通过注释掉相关文件中的#error行得以解决。其次,PCM_VIDC未定义的问题,通过注释掉ffmpeg的pcm.c文件最后一行解决。最后,由于x64汇编代码不兼容,替换x64版ffmpeg源码解决了链接错误。使用gng和ninja命令进行编译,并调整了编译参数以适应编译需求。

被折叠的 条评论
为什么被折叠?



