WebRTC服务器由三部分组成:
1. 房间服务器:对客户端提供信令服务器的配置信息,通过http协议实现
2. 信令服务器:将本地端的condidate经过SDP协议封装,通过websocket发送给远程端,实现本地和远程端的condidates的交换,从而实现”穿墙”
3. coturn服务器:客户端condidates发现服务器
房间服务器和信令服务器google的demo下载地址:https://github.com/webrtc/apprtc 。apprtc包含有房间服务器和信令服务器的实现。
coturn服务器下载地址:https://github.com/coturn/coturn
房间与信令服务器的配置
环境配置
- 系统版本:Ubuntu 5.4.0-6ubuntu1~16.04.4
- 安装如下依赖工具:
sudo apt-get install openjdk-7-jdk
sudo apt-get install nodejs
sudo apt-get install -y npm
sudo npm install -g npm
sudo apt-get install nodejs-legacy
sudo npm -g install grunt-cli
sudo apt-get install python-webtest
sudo apt-get install -y python-requests
sudo apt-get install golang-go
sudo apt-get install -y mercurial
apprtc房间服务器运行时需依赖Google App Engine SDK for Python点击下载(需要翻墙)。下载完成后解压并设置环境变量
sudo vi /etc/profile
export PATH=$PATH:/home/google_appengine
source /etc/profile
配置房间服务器
- 修改文件src/app_engine/apprtc.py
//在get_wss_parameters方法中,需要把 wss: 替换成 ws:、把 https: 替换成 http:
def get_wss_parameters(request):
......
if wss_tls and wss_tls == 'false':
wss_url = 'ws://' + wss_host_port_pair + '/ws'
wss_post_url = 'http://' + wss_host_port_pair
else:
wss_url = 'ws://' + wss_host_port_pair + '/ws'
wss_post_url = 'http://' + wss_host_port_pair
return (wss_url, wss_post_url)
不要使用ssl链接,因为没有有效证书,ssl链接会失败!
//在make_pc_config方法中,在config里面加turnserver和stunserver地址和用户密码,jalon是用户名,密码也是jalon.如下:
config = {
'iceServers': [{"urls":"stun:192.168.1.183"},{"urls":"turn:jalon@192.168.1.183","credential": "jalon"}],
}
- 修改文件src/app_engine/constants.py,修改TURN_BASE_URL,WSS_INSTANCES,CEOD_KEY,如下所示
# TODO: Remove once clients support ICE_SERVER.
#TURN_BASE_URL = 'https://computeengineondemand.appspot.com'
TURN_BASE_URL = 'http://192.168.1.183:3478'
#TURN_BASE_URL = 'http://107.160.87.231:3478'
TURN_URL_TEMPLATE = '%s/turn?username=%s&key=%s'
#CEOD_KEY = '4080218913'
CEOD_KEY = 'jalon'#必须和cotrun服务器配置一致
#107.160.87.231
#ICE_SERVER_BASE_URL = 'https://networktraversal.googleapis.com'
ICE_SERVER_BASE_URL = 'http://192.168.1.183:3478'
#ICE_SERVER_BASE_URL = 'http://107.160.87.231:3478'
ICE_SERVER_URL_TEMPLATE = '%s/v1alpha/iceconfig?key=%s'
ICE_SERVER_API_KEY = os.environ.get('ICE_SERVER_API_KEY')
WSS_INSTANCES = [{
#WSS_INSTANCE_HOST_KEY: 'apprtc-ws.webrtc.org:443',
#WSS_INSTANCE_HOST_KEY: '107.160.87.231:8089',
WSS_INSTANCE_HOST_KEY: '192.168.1.183:8089',
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_HOST_KEY: '107.160.87.231:8089',
WSS_INSTANCE_HOST_KEY: '192.168.1.183:8089',
WSS_INSTANCE_NAME_KEY: 'wsserver-std-2',
WSS_INSTANCE_ZONE_KEY: 'us-central1-f'
}]
修改完成后执行grunt build,编译完成后会生成out目录,可以直接执行
dev_appserver.py --host=0.0.0.0 ./out/app_engine
打印log如下:
jalon@sub-server:~/apprtc$ dev_appserver.py --host=0.0.0.0 ./out/app_engine
INFO 2017-01-17 08:34:47,013 sdk_update_checker.py:229] Checking for updates to the SDK.
INFO 2017-01-17 08:35:05,035 sdk_update_checker.py:245] Update check failed: <urlopen error [Errno 101] Network is unreachable>
INFO 2017-01-17 08:35:05,116 api_server.py:205] Starting API server at: http://localhost:41124
INFO 2017-01-17 08:35:05,121 dispatcher.py:197] Starting module "default" running at: http://0.0.0.0:8080
INFO 2017-01-17 08:35:05,128 admin_server.py:116] Starting admin server at: http://localhost:8000
配置信令服务器
- 创建服务器目录:
sudo mkdir -p /collider_root/src
sudo chmod 777 /collider_root/src
- 修改环境变量
sudo vi /etc/profile
export GOPATH=/collider_root
source /etc/profile
- 拷贝服务器源码文件
将apprtc\src\collider 目录文件拷贝至/collider_root/src目录下
- 开始编译
进入/collider_root/src目录下,执行:
go get collidermain
go install collidermain
- 运行服务器
修改collider_root/src/collidermain/main.go填上信令服务器的ip地址,如下:
var roomSrv = flag.String("room-server", "http://192.168.1.183:8080/", "The origin of the room server")
修改后保存。
执行/collider_root/bin/collidermain -port=8089 -tls=false启动信令服务器.
coTurn服务器配置
coTurn服务器目前是google维护的开源服务器,源码托管在github上https://github.com/coturn/coturn。为了节省配置的时间,也可以直接下载已经编译好的软件包,在下面站点可以下载我们对应平台的软件包:http://turnserver.open-sys.org/downloads/v4.4.1.2/ 打开这个网址,根据我们的服务器类型选择下载,我现在选择Debian和Ubuntu系统的包:
命令行下载:
wget http://turnserver.open-sys.org/downloads/v4.4.1.2/turnserver-4.4.1.2-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz
解压:
tar xvfz turnserver-4.4.1.2-debian-wheezy-ubuntu-mint-x86-64bits.tar.gz
参考安装手册 INSTALL 文件进行安装:
sudo apt-get update
sudo apt-get install gdebi-core
sudo gdebi coturn*.deb
然后编辑配置文件,打开系统默认启动配置:
vim /etc/default/coturn
将TURNSERVER_ENABLED=1去掉注释,保存退出.
修改coturn的配置文件 /etc/turnserver.conf,配置如下:
#listening-device=enp2s0
#listening-ip=192.168.1.183
#relay-device=enp2s0
#relay-ip=192.168.1.183
verbose
fingerprint
lt-cred-mech
#use-auth-secret
#static-auth-secret=jalon
realm=demo
user=jalon:0xa9f776c6470bab44567b2584863e7345
user=jalon:jalon
stale-nonce
#cert=/etc/turn_server_cert.pem
#pkey=/etc/turn_server_pkey.pem
no-loopback-peers
no-multicast-peers
mobility
no-cli
上面的user=jalon:0xa9f776c6470bab44567b2584863e7345 是通过
# $ turnadmin -k -u jalon -r north.gov -p jalon
# Output: 0xa9f776c6470bab44567b2584863e7345
生成的,在turn.config文件中有详细说明!
自动运行脚本
#!/bin/sh
export PATH=$PATH:/home/jalon/google_appengine
export export GOPATH=/collider_root
cd /home/jalon/apprtc
dev_appserver.py --host=0.0.0.0 ./out/app_engine &
/collider_root/bin/collidermain -port=8089 -tls=false &
turnserver &
测试截图
启动服务器后,两个手机分别安装AppRTC应用,在设置中将服务器地址设置为http://192.168.1.183后设置同一个房间登入。
相关问题:
在grunt build房间服务器是出错
Running "shell:buildAppEnginePackage" (shell) task
Traceback (most recent call last):
File "./build/build_app_engine_package.py", line 12, in <module>
import requests
ImportError: No module named requests
Warning: Command failed: /bin/sh -c 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 <module>
import requests
ImportError: No module named requests
Use --force to continue.
安装
apt-get install -y python-requests后解决
go get collidermain出错
自动安装依赖出错,解决方法:
1. 先安装go环境
1.下载Go安装包
wget https://storage.googleapis.com/golang/go1.5.3.linux-amd64.tar.gz
tar xvf go1.5.3.linux-amd64.tar.gz
2.创建本地GO代码目录
mkdir -p $HOME/gopath/src
3.编辑$HOME/.profile添加
export GOROOT=$HOME/go
export GOPATH=$HOME/gopath
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin
退出终端重新打开或者登陆,GO环境就安装配置好了
- 安装信令服务器的依赖
cd $GOPATH/src
wget http://www.golangtc.com/static/download/packages/golang.org.x.net.tar.gz
tar xvf golang.org.x.net.tar.gz
go install golang.org/x/net/websocket/
cd -
依赖项安装完后,我们安装collidermain命令服务器程序:
go install collidermain