前言
在前面的WebRTC介绍中我们已经介绍了WebRTC的编译以及成功地把WebRTC在Android Studio中运行了起来,详情请猛击
《WebRTC导入Android Studio》
在后面的学习过程中,我们将进一步使用WebRTC实现Android端的实时通信对话。为了方便后续的开发和测试,今天我们来搭建WebRTC的服务器环境。
安装环境
笔者使用的云服务器是Ubuntu 16.04。
注意尽量使用与笔者相同版本的系统,不然可能因为安装的各种环境版本不同而导致搭建失败
需要在云服务器后台开放(出入规则)端口: 3478、8080、8089、80、443
本服务器的搭建教程主要来源于WebRTC的开源项目apprtc:https://github.com/webrtc/apprtc
1、安装JDK
#如果是全新的系统则需要更新一下apt
apt-get update
apt-get upgrade
# 安装JDK8
apt-get install openjdk-8-jdk
# 检测下java是否安装成功,如果成功输出版本号则安装成功
java -version
2、安装node.js
apt install nodejs-legacy
# 查看一下版本 v4.2.6
node --version
apt-get install npm
# 查看一下版本 3.5.2
npm --version
# 安装gnurt,尽量带上版本号,不然可能报node版本太低的错
npm -g install [email protected]
# 查看下版本 grunt-cli v1.3.2
grunt --version
3、安装Python和Python-webtest (python2.7)
apt-get install python
apt-get install python-webtest
python -V
#Python 2.7.12
4、安装go
apt install golang-go
# 查看版本 go version go1.6.2 linux/amd64
go version
#创建go工作目录
mkdir -p /root/webrtc/goWorkspace/src
#配置环境变量:在/etc/profile文件最后增加一行:
export GOPATH=/root/webrtc/goWorkspace
# 刷新一下环境变量
source /etc/profile
在使用vi命令行的时候可能会遇到方向键乱位的问题,由于ubuntu 预安装的是tiny版本,所以会导致我们在使用时候产生上述不便,但是我们安装vim的full版本后,键盘所在键在vi下就很正常了。
解决方法:卸载tiny 版本sudo apt-get remove vim-common
,安装full 版本sudo apt-get install vim
5、安装google_appengine
#当前目录:root/webrtc/
wget https://storage.googleapis.com/appengine-sdks/featured/google_appengine_1.9.40.zip
# 安装unzip
apt-get install unzip
unzip google_appengine_1.9.40.zip
#配置环境变量:在/etc/profile文件最后增加一行:
export PATH=$PATH:/root/webrtc/google_appengine
source /etc/profile
6、安装libevent
#当前目录:root/webrtc/
#https://github.com/coturn/coturn/wiki/CoturnConfig
wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
tar xvf libevent-2.0.21-stable.tar.gz
cd libevent-2.0.21-stable
./configure
make
make install
7、安装apprtc
#当前目录:root/webrtc/
# 注意如果没有git的话,需要apt install git安装一下git
git clone git://github.com/webrtc/apprtc.git
#将collider的源码软连接到go的工作目录下
ln -s /root/webrtc/apprtc/src/collider/collider $GOPATH/src
ln -s /root/webrtc/apprtc/src/collider/collidermain $GOPATH/src
ln -s /root/webrtc/apprtc/src/collider/collidertest $GOPATH/src
#编译collidermain,需要你懂的上网
go get collidermain
go install collidermain
在执行go get collidermain
由于众所周知的原因可能导致无法下载,可能会报以下的错误:
#报错: package golang.org/x/net/websocket: unrecognized import path "golang.org/x/net/websocket"
这时候我们只要单独使用git下载net即可:
mkdir -p $GOPATH/src/golang.org/x/
cd $GOPATH/src/golang.org/x/
git clone git://github.com/golang/net.git net
go install net
# 重新获取一下collidermain
go get collidermain
go install collidermain
8、安装coturn
#目录:root/webrtc/
#https://github.com/coturn/coturn/wiki/Downloads
wget http://coturn.net/turnserver/v4.5.0.7/turnserver-4.5.0.7.tar.gz
tar xvfz turnserver-4.5.0.7.tar.gz
cd turnserver-4.5.0.7
./configure
make install
配置运行服务器
1、coturn Nat穿透服务器
注意这里需要设置一下用户名和密码,后面会配置apprtc的时候需要使用到。
#启动内网ip,这个是172开头的,在你云服务器的后台可以查询到,比如笔者的是172.16.16.4,用户名设置为flyer,密码为123456
nohup turnserver -L 172.16.16.4 -a -u flyer:123456 -v -f -r nort.gov &
# 可以通过命令lsof -i:3478查询下是否启动成功,成功的话一般会输出以下信息
#COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
#turnserve 14754 root 16u IPv4 112232 0t0 UDP instance-5i00bk4l:3478
#turnserve 14754 root 17u IPv4 112233 0t0 UDP instance-5i00bk4l:3478
#turnserve 14754 root 32u IPv4 112263 0t0 TCP instance-5i00bk4l:3478 (LISTEN)
#turnserve 14754 root 33u IPv4 112267 0t0 TCP instance-5i00bk4l:3478 (LISTEN)
2、collider 信令服务器
配置防火墙,允许访问8089端口(tcp,用于客户端和collider建立websocket信令通信)
#创建自签名的数字证书,如果没有openssl,需要安装
mkdir -p /cert
cd /cert
# CA私钥
openssl genrsa -out key.pem 2048
# 自签名证书
openssl req -new -x509 -key key.pem -out cert.pem -days 1095
nohup $GOPATH/bin/collidermain -port=8089 -tls=true -room-server="https://你服务器的公网ip:8080" &
#使用命令lsof -i:8089检查下是否启动成功,如果成功则会输出以下相似的信息
#COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
#colliderm 14817 root 3u IPv6 112969 0t0 TCP *:8089 (LISTEN)
3、搭建apprtc房间服务器
主要是修改配置文件/root/webrtc/apprtc/src/app_engine/constants.py
中的相关参数即可:
注意这里就需要使用到前面配置coturn Nat穿透服务器时锁设置的用户名和密码
首先修改穿透服务器配置:
修改前
# ICE_SERVER_OVERRIDE = [
# {
# "urls": [
# "turn:hostname/IpToTurnServer:19305?transport=udp",
# "turn:hostname/IpToTurnServer:19305?transport=tcp"
# ],
# "username": "TurnServerUsername",
# "credential": "TurnServerCredentials"
# },
# {
# "urls": [
# "stun:hostname/IpToStunServer:19302"
# ]
# }
# ]
#修改后
ICE_SERVER_OVERRIDE = [
{
"urls": [
"turn:你服务器的公网ip:3478?transport=udp",
"turn:你服务器的公网ip:3478?transport=tcp"
],
"username": "coturn Nat穿透服务器的用户名",
"credential": "coturn Nat穿透服务器密码"
},
{
"urls": [
"stun:你服务器的公网ip:3478"
]
}
]
然后修改ICE配置:
#未修改前
ICE_SERVER_BASE_URL = 'https://appr.tc'
#修改后
ICE_SERVER_BASE_URL = 'https://你服务器的公网ip'
最后修改WSS_INSTANCE_HOST_KEY:
#修改前
WSS_INSTANCE_HOST_KEY = 'host_port_pair'
WSS_INSTANCE_NAME_KEY = 'vm_name'
WSS_INSTANCE_ZONE_KEY = 'zone'
WSS_INSTANCES = [{
WSS_INSTANCE_HOST_KEY: 'apprtc-ws.webrtc.org:443',
WSS_INSTANCE_NAME_KEY: 'wsserver-std',
WSS_INSTANCE_ZONE_KEY: 'us-central1-a'
}, {
WSS_INSTANCE_HOST_KEY: 'apprtc-ws-2.webrtc.org:443',
WSS_INSTANCE_NAME_KEY: 'wsserver-std-2',
WSS_INSTANCE_ZONE_KEY: 'us-central1-f'
}]
# 修改后
WSS_INSTANCE_HOST_KEY = '你服务器的公网ip:8089'
WSS_INSTANCE_NAME_KEY = 'vm_name'
WSS_INSTANCE_ZONE_KEY = 'zone'
WSS_INSTANCES = [{
WSS_INSTANCE_HOST_KEY: '你服务器的公网ip:8089',
WSS_INSTANCE_NAME_KEY: 'wsserver-std',
WSS_INSTANCE_ZONE_KEY: 'us-central1-a'
}]
最后修改完成保存即可。
编译下apprtc
#编译
cd /root/webrtc/apprtc
# 以下这一步可能会报错,提示node版本太低
# 如果报错我们需要使用npm install -g n和sudo n stable更新以下node然后再继续执行以下命令即可
npm install --no-fund
# 这一步有可能报错,下面有解决方法
grunt build
在上面执行grunt build
的时候有可能会报错提示requests模块不存在,我们使用pip安装一下即可,
报错信息:
ImportError: No module named requests
Warning: Command failed: python ./build/build_app_engine_package.py src out/app_engine
Traceback (most recent call last):
File "./build/build_app_engine_package.py", line 12, in
import requests
ImportError: No module named requests
Use --force to continue.Aborted due to warnings.
##### 安装pip
cd /root/webrtc
wget https://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg --no-check-certificate
chmod +x setuptools-0.6c11-py2.7.egg
./setuptools-0.6c11-py2.7.egg
wget https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz
tar -xf pip-1.5.4.tar.gz
cd pip-1.5.4
python setup.py install
pip install requests
# 安装完成后再执行编译:
cd /root/webrtc/apprtc
# 重新执行下编译
grunt build
启动apprtc
#注意以下内网ip是172开头的
nohup dev_appserver.py --host=服务器的内网ip /root/webrtc/apprtc/out/app_engine --skip_sdk_update_check &
到了这一步WebRTC的服务器基本就算搭建完成了,这时候在你的浏览器输入http://服务器公网IP:8080/
如果能顺利打开,那么恭喜你环境算是搭建成功啦!!!
4、安装nginx代理https
为什么需要安装nginx,因为chrome浏览器不支持在非https方式下打开音/视频设备。
而且apprtc中的信令服务器(collider)也不支持非 https 服务。
但是我们在前面配置中都是使用http的服务,没有直接配置成https的,因此我们需要使用nginx做一次代理,实现https的服务。
当然如果在前面的配置中我们直接使用https的服务,那么这一步就没有必要了,但是需要我们有第三方的证书,而不是使用私有证书。
下面下载安装以下nginx:
# 下载nginx
wgwt http://nginx.org/download/nginx-1.16.1.tar.gz
# 解压
tar xvf nginx-1.16.1.tar.gz
# 安装PCRE
apt-get install libpcre3-dev
cd nginx-1.16.1
./configure --with-http_ssl_module
make install
#默认安装在/usr/local/nginx
#配置nginx.conf
vim /usr/local/nginx/conf/nginx.conf
修改nginx配置/usr/local/nginx/conf/nginx.conf
:
events {
worker_connections 1024;
}
http{
upstream roomserver {
server 你服务器的公网ip:8080;
}
server {
listen 80;
server_name 你服务器的公网ip;
return 301 https://$server_name$request_uri;
}
server {
root /usr/share/nginx/html;
index index.php index.html index.htm;
listen 443 ssl;
ssl_certificate /cert/cert.pem;
ssl_certificate_key /cert/key.pem;
server_name 4你服务器的公网ip;
location / {
proxy_pass http://roomserver$request_uri;
proxy_set_header Host $host;
}
location ~ .php$ {
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}
}
}
启动nginx:
/usr/local/nginx/sbin/nginx
这时候再次在浏览器输入服务器的ip就能打开apprtc了,打开后大概如图这样子的:
然后点击加入房间,允许相关权限就能通过摄像头看到自己的画面了...
吐槽两句
不得不说为了准备一个WebRTC的开发测试环境还是有点坑的,虽然说按照步骤来不难,但是需要搭建的内容实在是太多,而且极容易一步错步步错。
笔者也是尝试了好几天,查了很多的资料做了很多尝试才搭建成功。最后还是为互联网人的网络不能互联而WTF发泄一下...
共勉!!!
关注我,一起进步,人生不止coding!!!