什么是WebRTC?

WebRTC,名称源自网页实时通信(Web Real-Time Communication)的缩写,简而言之它是一个支持网页浏览器进行实时语音对话或视频对话的技术。是谷歌2010年以6820万美元收购Global IP Solutions公司而获得的一项技术,它为我们提供了视频会议的核心技术,包括音视频的采集、编解码、网络传输、显示等功能,并且还支持跨平台:windows,linux,mac,android,iOS。

它在2011年5月开放了工程的源代码,在行业内得到了广泛的支持和应用,成为下一代视频通话的标准。

官网介绍:https://webrtc.org

WebRTC的源码很大,大概需要6G左右

用CocoaPods下载编译好的库:pod 'libjingle_peerconnection'

编译好的WebRTC.framework 连接直接使用请下载后,跳到第六步查看使用WebRTC.framework注意事件

使用WebRTC进行音视频文字传输WebRTC_iOS demo

1.安装环境

系统环境:Mac OS
网络环境:翻墙工具

2.安装git

http://www.cnblogs.com/ccdev/archive/2012/09/12/2682098.html

3.安装depot_tools

具体步骤:

https://www.cnblogs.com/baitongtong/p/9522242.html

创建一个目录专门来存放项目编译工具和项目代码仓库等,确保该目录所在磁盘可用空间至少有8~10G.打开系统的终端工具:

mkdir webrtc_build

在执行下面命令之前,请确保你已经连上VPN已经FQ了,或者你已经给git单独配置了有效的socksFQ代理。开始安装depot_tools,这是一套Google用来编译Chromium或者WebRTC的构建工具,在我们后续的编译过程中也将使用它。

a.  cd webrtc_build

b.  git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

c.  把depot_tools 设置到PATH中:echo "export PATH=$PWD/depot_tools:$PATH" > $HOME/.bash_profile

d.  使PATH设置生效:source $HOME/.bash_profile

e.  echo $PATH查看设置是否生效。

4、获取WebRTC源码

这里请打开你的翻墙工具。

在我们的编译工作目录webrtc_build下创建一个webtrtc子目录来存放代码:

mkdir webrtc

cd webrtc

开始把WebRTC项目的代码仓库下载一份到本地来,由于其仓库之大,大约一共需要下载6G+的东西,所以这一步非常需要有耐心,而且需要有稳定无障碍的互联网:

a.  设置要编译的平台到环境变量中:export GYP_DEFINES="OS=ios"

b.  fetch --nohooks webrtc_ios

c.  gclient sync

c步骤,也可以使用gclient sync -r eeab9ccb2417cab18ae1681c6644c25fa4eadcd3指定版本,注意:eeab9ccb2417cab18ae1681c6644c25fa4eadcd3为版本号。获取版本号方式为:

a. 进入[WebRTC](https://webrtc.org/native-code/ios/)官网
b. 点击上方About->Release Notes
 
 
c. 选择想要下载的版本,例如M59,进入如下页面
 
 
d. 点击WebRTC M59 branch后
 
 
e. 选择第一行,进入如下页面
 
 

现在即可见到版本号eeab9ccb2417cab18ae1681c6644c25fa4eadcd3。
注意:fetch --nohooks webrtc_ios 和 gclient sync这一步需要等待很久。

5.编译WebRTC

源码下载好了,现在目录结构如下图:

 
 

这些源码可以编译为好几个平台,OS X、Linux、 Windows、Android、iOS等。这里我们只需要编译iOS平台的WebRTC,并制作成一个iOS的开发框架,我们需要在终端命令行环境下去搞定这一切。

5.1设置构建配置,分环境编译

a.  进入WebRTC源码文件:cd src

b.  根据需要编辑构建配置,编译iOS系统,设置为target_os="ios",编译iOS真机,target_cpu为"arm"或"arm64",编译iOS模拟器,target_cpu="x64",如:

gn gen out/ios_64 --args='target_os="ios" target_cpu="arm64"'

gn gen out/ios_sim --args='target_os="ios" target_cpu="x64"'

c.  开始编译:ninja -C out/ios_64 AppRTCMobile

编译后,得到arm64下的WebRTC.framework,目录结构如下图:

 
 

5.2使用脚本,自动编译

在我们下载的源代码中有一个编译脚本,还是以我们下载的M59版本为例,其位置在src/tools_webrtc/ios/build_ios_libs.sh,直接执行这个脚本就能编译出需要的库文件了。编译后目录结构如下图:

 
 

图中选中的WebRTC.framework为包含arm64、arm、x64环境的库,如果需要具体环境下的WebRTC.framework,进入相应文件夹选择。

6.使用WebRTC.framework注意事件

将WebRTC.framework导入工程后,运行会报错:

dyld: Library not loaded: @rpath/WebRTC.framework/WebRTC

Referenced from: /Users/MFJun/Library/Developer/CoreSimulator/Devices/4441D192-28A0-46AF-9CA9-C8945BB3442C/data/Containers/Bundle/Application/34E51961-4516-4478-AA59-579342D8D3A5/WebScoketTest.app/WebScoketTest

Reason: image not found

仔细看错误原因,是没有找到framework文件包,解决方法是:
TARGETS -> Build Phases -> New Copy Files

 
 

接着再点击下面+号,选择自定义的framework

 
 

在arm64的环境下,运行会报错

 
 

把TARGETS -> Build Settings -> Enable Bitcode设置为NO

 
 

接下来,编译完成。

iOS - WebRTC 自编译(音视频即时通讯开源库)的更多相关文章

  1. iOS WebRTC 点对点实时音视频流程介绍

    前言 公司某个项目需要接入音视频即时通讯, 功能类似微信的拨打视频通话,语音通话的场景.那么对于音视频通讯会用到什么技术呢?没错,它就是 WebRTC . 什么是WebRTC WebRTC,名称源自网 ...

  2. 一对一voip,直播连麦,在线会议,兼容webrtc,IM音视频

    功能 IM消息系统 一对一 高清音视频实时通信,可无缝切换P2P传输,节省服务器带宽 一对多互动直播 多对多在线会议 手机实时录屏传输 高度定制化 网络检测,动态码率与动态帧率,抗网络抖动,微信级效果 ...

  3. IOS 获取设备本地音视频

    1.检索音视频 PHFetchOptions *allPhotosOptions; @property (nonatomic, strong) PHFetchResult *assetsFetchRe ...

  4. ios 即时通讯开源IM,LeanCloud、融云、环信

    环信官网链接: http://easemob.com/docs/ios/

  5. iOS异步图片加载优化与常用开源库分析

    网络图片显示大体步骤: 1.下载图片: 2.图片处理(裁剪,边框等): 3.写入磁盘: 4.从磁盘读取数据到内核缓冲区: 5.从内核缓冲区复制到用户空间(内存级别拷贝): 6.解压缩为位图(耗cpu较 ...

  6. android音视频点/直播模块开发

      音视频 版权声明:本文为博主原创文章,未经博主允许不得转载. 前言 随着音视频领域的火热,在很多领域(教育,游戏,娱乐,体育,跑步,餐饮,音乐等)尝试做音视频直播/点播功能,那么作为开发一个小白, ...

  7. Android音视频点/直播模块开发实践总结-zz

    随着音视频领域的火热,在很多领域(教育,游戏,娱乐,体育,跑步,餐饮,音乐等)尝试做音视频直播/点播功能.那么作为开发一个小白,如何快速学习音视频基础知识,了解音视频编解码的传输协议,编解码方式,以及 ...

  8. 转:Android IOS WebRTC 音视频开发总结 (系列文章集合)

    随笔分类 - webrtc   Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译和整理的,译 ...

  9. Android IOS WebRTC 音视频开发总结(七四)-- WebRTC开源5周年了,Google怎么看?

    本文最早发表在我们的微信公众号上(微信ID:blackerteam),支持原创,详见这里, 2016年6月9日是WebRTC开源5周年的日子,Google WebRTC负责人Harald在社区里面写了 ...

随机推荐

  1. 2D转换模块

    2D转换模块(transform) 1.取值:rotate(45deg)--- 旋转,默认以自己为中心作为参考点来旋转 .translate(100px,0px)--- 平移,第一个参数代表水平方向, ...

  2. idea在docker环境,调试spring boot程序

    允许docker被远程访问 见:https://www.cnblogs.com/wintersoft/p/10921396.html 教程见:https://spring.io/guides/gs/s ...

  3. tomcat的CATALINA_HOME环境变量可以不用设置

    不配置tomcat的环境变量也是可以运行的 用记事本打开tomcat/bin目录下面的startup.bat 在文本的前一部分有下面的脚本代码rem Guess CATALINA_HOME if no ...

  4. python简单的游戏场景代码

    模拟英雄联盟游戏场景的简单场景 最后计算出英雄的战斗力 class Hero: def __init__(self, na, gen, age, fig): self.name = na self.g ...

  5. JVM探究之 —— HotSpot虚拟机对象探秘

    本节以常用的虚拟机HotSpot和常用的内存区域Java堆为例,深入探讨HotSpot虚拟机在Java堆中对象分配.布局和访问的全过程. 1. 对象的创建 Java是一门面向对象的编程语言.在语言层面 ...

  6. ERROR: relation "pg_buffercache" does not exist

    创建pg_buffercache后,查询时报错: postgres=# create extension pg_buffercache; postgres=# select * from pg_buf ...

  7. python初级(302) 2 easygui简单使用

    一.复习之前的两个练习,巩固计数循环和条件循环 1.系统生成一个随机数1到5,然后让用户的猜测,若猜对了,提示恭喜你,猜对了,否则提示,对不起,你猜错了(提示,1到5的随机数为:secret = ra ...

  8. vue -- router路由跳转错误 , NavigationDuplicated

    vue-router ≥3.0版本回调形式以及改成promise api的形式了,返回的是一个promise,如果路由地址跳转相同, 且没有捕获到错误,控制台始终会出现如图所示的警告 (注:3.0以下 ...

  9. Survey of single-target visual tracking methods based on online learning 翻译

    基于在线学习的单目标跟踪算法调研 摘要 视觉跟踪在计算机视觉和机器人学领域是一个流行和有挑战的话题.由于多种场景下出现的目标外貌和复杂环境变量的改变,先进的跟踪框架就有必要采用在线学习的原理.本论文简 ...

  10. Mac和window实现双向数据传输

    Mac和window实现双向数据传输 总体步骤:第一步,在window上设置开发访问权限,然后选择要共享的磁盘或者文件夹第二步,在Mac上使用 Finder里面的网络,command+K,选择一个IP ...