MacOS下C++使用WebRTC注意事项及问题解决
背景
近一段时间在开发MacOS下视频相关app,之前一直通过WebRTC.framework的形式引用webrtc的objc接口, 由于新的特性不仅需要oc接口,还需要使用WebRTC C++接口,因此需改成通过静态库链接webrtc.
碰到的问题与解决
对于iOS/macOS平台,开启openh264,去除test,使用如下命令
gn gen out/mac --args="proprietary_codecs=true use_openh264=true ffmpeg_branding=\"Chrome\" rtc_include_tests=false"ninja -C out/mac
可以生成WebRTC.framework以及对应的C++静态库libwebrtc.a. 但是当我尝试直接链接出来的libwebrtc.a时,编译器报出下面两类链接问题
1, typeid符号找不到
2,所有objective-c符号
对于第一个问题加上
use_rtti=true
开启RTTI后可以解决,对于第二个问题,经过查看编译产物发现,在out/mac/obj/sdk下有若干.a库
libbase_native_additions_objc.a
libbase_objc.a
libcallback_logger_objc.a
libdefault_codec_factory_objc.a
libfile_logger_objc.a
libhelpers_objc.a
libmediaconstraints_objc.a
libmediasource_objc.a
libmetal_objc.a
libnative_api.a
libnative_video.a
libpeerconnectionfactory_base_objc.a
libui_objc.a
libvideo_objc.a
libvideo_toolbox_cc.a
libvideocapture_objc.a
libvideocodec_objc.a
libvideoframebuffer_objc.a
libvideorendereradapter_objc.a
libvideosource_objc.a
libvideotoolbox_objc.a
libvp8.a
libvp9.a
libvpx_codec_constants.a
libwrapped_native_codec_objc.a
猜测objective-c的符号应该是没有被编译进入libwebrc.a,而是在out/mac/obj/sdk这些库中。将全部这些库增加到链接目录,又发现有重复符号。去除libbase_objc.a和libhelper_objc.a后解决。
解决这些问题后,可以编译链接成功。但是运行的时候会崩溃。查看调用堆栈,崩溃代码在std::string内部。怀疑是标准库冲突引起的,查阅相关资料发现webrtc默认使用自带的libc++库,由于xcode默认也用libc++,因此接口是兼容的,但是内部实现可能不同,导致运行崩溃。加上
use_custom_libcxx=false
这个编译选项后,成功运行。
总结macos嵌入webrtc流程
1,编译
gn gen out/mac --args="use_rtti=true use_custom_libcxx=false proprietary_codecs=true use_openh264=true ffmpeg_branding=\"Chrome\" rtc_include_tests=false"
ninja -C out/mac
2, 导出头文件
3,引用
libwebrtc.a
libbase_native_additions_objc.a
libcallback_logger_objc.a
libdefault_codec_factory_objc.a
libfile_logger_objc.a
libmediaconstraints_objc.a
libmediasource_objc.a
libmetal_objc.a
libnative_api.a
libnative_video.a
libpeerconnectionfactory_base_objc.a
libui_objc.a
libvideo_objc.a
libvideo_toolbox_cc.a
libvideocapture_objc.a
libvideocodec_objc.a
libvideoframebuffer_objc.a
libvideorendereradapter_objc.a
libvideosource_objc.a
libvideotoolbox_objc.a
libvp8.a
libvp9.a
libvpx_codec_constants.a
libwrapped_native_codec_objc.a
到此这篇关于MacOS下C++使用WebRTC注意事项的文章就介绍到这了,更多相关C++使用WebRTC内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341