WebRTC,是Web Real-Time Communication的缩写,是谷歌2010年以6820万美元收购Global IP Solutions公司而获得的一项技术,于2011年5月开放了工程的源代码,在行业内得到了广泛的支持和应用,成为下一代视频通话的标准。
这篇文章要搭建的,是基于webrtc的apprtc示例,GitHub地址:https://github.com/webrtc/apprtc 里面有讲一些安装步骤,但是不够仔细,楼主试了几天,填了很多坑之后,终于将环境搭起来了,过程比较艰辛,要安装的东西和注意的细节太多,值得写篇文章来记录一下~
准备工作
了解原理
需要搭建三个服务器,分别是房间服务器、信令服务器以及打洞服务器
通话的房间服务器(Room Server)
房间服务器是用来创建和管理通话会话的状态维护,是双方通话还是多方通话,加入与离开房间等等,我们暂时沿用Google部署在GAE平台上的AppRTC这个房间服务器实现,该GAE App的源码可以在github.com上获取.该实现是一个基于Python的GAE应用,我们需要下载Google GAE的离线开发包到我们自己的Linux服务器上来运行该项目,搭建大陆互联网环境下的房间服务器。
通话的信令服务器(Signaling Server)
信令服务器是用来管理和协助通话终端建立去中心的点对点通话的一个角色,主要功能如下,具体协议实现没有严格规定,只要能实现功能就行
- 用来控制通信发起或者结束的连接控制消息
- 发生错误时用来相互通告的消息
- 各自一方媒体流元数据,比如像解码器、解码器的配置、带宽、媒体类型等等
- 两两之间用来建立安全连接的关键数据
- 外界所能看到的网络上的数据,比如广域网IP地址、端口等
防火墙打洞服务器(STUN/TURN/ICE Server)
我们目前大部分人连接互联网时都处于防火墙后面或者配置私有子网的家庭(NAT)路由器后面,这就导致我们的计算机的IP地址不是广域网IP地址,故而不能相互之间直接通讯. 正因为这样的一个场景,我们得想办法去穿越这些防火墙或者家庭(NAT)路由器,让两个同处于私有网络里的计算机能够通讯起来。
ICE协议是一个offer/answer模型的扩展,是综合TURN和STUN的综合性NAT穿越解决方案,通过在offer和answer的SDP(Session Description Protocol)里面包含多种IP地址和端口,然后对本地SDP和远程SDP里面的IP地址进行配对,然后通过P2P连通性检查进行连通性测试工作,如果测试通过即表明该传输地址对可以建立连接。有兴趣可以去搜索了解一下,这次要安装的ICESever是coTurn,它的功能比较丰富,是一个C/C++语言的开源项目,项目地址: https://code.google.com/archive/p/coturn/
环境准备
先说一下,楼主系统是ubuntu14.04,内网IP是125.216.242.151,后续很多命令都是基于ubuntu,很多配置中都要用到IP地址,而且需要填写机构或key的时候,楼主都是用的ID:jwcqc,另外,所有的下载或安装都在/server/目录下。
首先需要安装nodejs包管理和分发工具npm:
sudo apt-get install npm
其次是安装python-webtest:
sudo apt-get install python-webtest
科学上网
由于安装过程中像Google App Engine和编译安装collider都需要FQ,因此最好提前准备好 FQ 环境,否则安装过程中会遇到网络引起的各种错误。
作为示例,楼主系统是ubuntu14.04,已通过设置http代理实现科学上网,只需编辑 /etc/profile,填入以下三行即可:
export http_proxy=http://your_proxy.com:port/
export ftp_proxy=http://your_proxy.com:port/
export https_proxy=http://your_proxy.com:port/
然后 source /etc/profile 进行保存,可以使用curl www.google.com 测试一下是否设置成功。
环境搭建
房间服务器搭建
- 安装依赖
sudo apt-get install nodejs
sudo npm install -g npm
sudo apt-get install nodejs-legacy
sudo npm -g install grunt-cli
- 下载apprtc源码
找到一个目录用来存放源码(楼主下载时最新提交版本是3459f8c1ba69a8011f117de3b46b2f19372e1660),依次执行
git clone https://github.com/webrtc/apprtc.git
cd apprtc
npm install //install grunt and required grunt dependencies
- 修改配置文件
接下来需要修改项目中的 /apprtc/src/app_engine/constants.py,修改的部分内容如下:
//turn打洞服务器配置
TURN_BASE_URL = 'https://125.216