MacOS下C++使用WebRTC注意事项及问题解决

目录
  • 背景
  • 碰到的问题与解决
  • 总结macos嵌入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内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 5分钟搭建一个WebRTC视频聊天

    在上篇文章给大家介绍了在Ubuntu上搭建一个基于webrtc的多人视频聊天服务实例代码详解,感兴趣的朋友可以参考下.今天给大家分享一篇关于5分钟搭建一个WebRTC视频聊天. 百度一下WebRTC,我想也是一堆.本以为用这位朋友( 搭建WebRtc环境 )的SkyRTC-demo 就可以一马平川的实现聊天,结果折腾了半天,文本信息都发不出去,更别说视频了.于是自己动手. 想在公网上实现视频通信,需要下面3个核心元素: 一个是NAT穿透服务器(ICE Server),实现内网穿透,具体的作用可以

  • MacOS下C++使用WebRTC注意事项及问题解决

    目录 背景 碰到的问题与解决 总结macos嵌入webrtc流程 背景 近一段时间在开发MacOS下视频相关app,之前一直通过WebRTC.framework的形式引用webrtc的objc接口, 由于新的特性不仅需要oc接口,还需要使用WebRTC C++接口,因此需改成通过静态库链接webrtc. 碰到的问题与解决 对于iOS/macOS平台,开启openh264,去除test,使用如下命令 gn gen out/mac --args="proprietary_codecs=true us

  • 详解Linux下读取位图的注意事项

    详解Linux下读取位图的注意事项 在Linux下读取位图遇到的问题,很好地体现了linux与Windows操作系统的不同.按理说位图格式与操作系统无关,读取也应该无关,实际上在位图读到内存中时已经不同.下面主要介绍自己在Linux下操作位图遇到的问题. (一).位图结构 位图一开始是两个结构体,包括位图的详细信息,是读取后面数据的关键.所以读取位图首先要正确读取这两个结构体:BITMAPFILEHEADER和BITMAPINFOHEADER.其具体定义为: typedef struct tag

  • MacOS 下安装 MySQL8.0 登陆 MySQL的方法

    按照 官方教程,下载安装包,点击安装后,如需在命令行启动,还需设置命令路径: 在命令行中,打开配置文件 .bash_profile: vim ~/.bash_profile 在最后一行加上: PATH=$PATH:/usr/local/mysql/bin 按 esc 键后 输入wq 进行保存和退出. 在命令行输入: source ~/.bash_profile 之后就可以在命令行用 mysql -u root -p 连接 MySQL 数据库了 总结 以上所述是小编给大家介绍的MacOS 下安装

  • macOS 下的 MySQL 8.0.17 安装与简易配置教程图解

    如果我写的这篇你看不懂,可能网上也没有你能看懂的教程了 虽然这篇针对的是8.0.x版本,但是关于MySQL配置之类的方法还是通用的 环境信息与适用范围# 环境信息 环境/软件 版本 macOS macOS Mojave MySQL MySQL 8.0.17 适用范围 环境/软件 版本 macOS macOS大概都行吧 MySQL 8.0.x 第零步,清除之前的MySQL# ( 除非你想装多个版本 ) 打开终端,输入以下

  • macOS下mysql 8.0.16 安装配置图文教程

    本文为大家分享了macOS下mysql 8.0.16 安装配置教程,供大家参考,具体内容如下 1.安装程序下载 打开MySQL 官网 选择 DOWNLOADS -> Community -> NySQL Community Server. 拖到页面底部,选择操作系统,此处是 8.0.16.安装包适用 macOS 10.14 版本,对 32 位或 64 位都兼容. 此处选择第一个,直接将 dmg 文件下载到本地. 紧接着会跳出注册或登录提示,选择跳过,直接下载安装包. 将安装包保存到本地. 2.

  • MacOS下mysql 8.0.18 安装配置方法图文教程

    本文记录了MacOS下安装MySQL8.0.18,并成功命令行操作,供大家参考,具体内容如下 ①下载MySQL8.0.18 下载网址:点击查看 下载后(dmg)进行安装. ②开启MySQL服务 ③配置环境变量 进入终端(这里用的是vim): vim ~/.bash_profile 在文件最后加入: PATH=$PATH:/usr/local/mysql/bin 保存并退出(ESC-> : -> wq). 让配置生效: source ~/.bash_profile 推出终端重新进入. mysql

  • MacOS下本地golang环境搭建详细教程

    安装golang 使用homebrew安装golang.homebrew是MacOS 平台下的软件包管理工具,拥有安装.卸载.更新.查看.搜索等功能.开发者不需要关心依赖和文件路径.如果系统没有安装homebrew,终端内执行以下命令安装homebrew. /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)" 安装完homebrew后执行以下命令

  • MacOS下PHP7.1升级到PHP7.4.15的方法

    最近写SDK的时候需要用到object类型提示符,PHPStorm智能提示说需要PHP7.2以上才能支持这种类型提示. 我一查我本机的PHP是7.1.30版本,于是考虑升级一下PHP版本. 首先要尝试使用如下命令进行升级: brew update brew upgrade php@7.4 第一个遇到的报错如下所示: git -C /usr/local/Homebrew/Library/Taps/homebrew/homebrew-core fetch --unshallow This restr

  • IOS 下获取 rootviewcontroller 的版本不同的问题解决办法

    IOS 下获取 rootviewcontroller 的版本不同的问题解决办法 一般 原生的 [[UIApplication sharedApplication].keyWindow.rootViewController presentModalViewController:self animated:NO]; 可以 获取  系统的  rootviewcontroller 但 cocos2d-x 2.1.1 在 appcontroller.mm 内定义的 加载方法是 // Set RootVie

  • macOS下Spring Boot开发环境搭建教程

    macOS搭建Spring Boot开发环境,具体内容如下 软硬件环境 macOS Sierra java 1.8.0_65 maven 3.5.0 idea 2017.1.5 前言 最近接触了一点java web相关的知识,了解一下最近比较火的开发框架Spring Boot,站在一个从未涉足过java web和spring的开发者角度来讲,spring boot确实是一个非常不错的框架,配置简单,容易入门,对于想入行java web的童鞋,是一个很好的切入点. maven安装 这里选择mave

随机推荐