网上其实有不少关于apprtc的搭建方案,因为我并不是一名后台人员,所以在实际搭建过程中遇到了一些各种原因导致的问题,所以我在此做记录希望能大家一些参考。
既然是从零开始,那么就从最基本的开始。
1.通过虚拟机安装一个Ubuntu系统
网上有很多安装教程就不一一赘述了。
2.安装相关依赖
-
实现科学上网,因为下面不少内容需要科学上网,所以建议先进行配置,或着挂一个好的代理。
-
安装git及curl
sudo apt-get install git
sudo apt-get install curl
- 安装node.js及相关项
node.js因为Ubuntu的apt并没有最新版本,所以我们需要先在终端执行下面curl的命令,然后install,而8.x代表相关版本:
curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
sudo apt-get install -y nodejs
通过node -v
执行显示版本号代表安装成功。
sudo npm install -g npm
sudo npm -g install grunt-cli
- 安装openjdk-7-jdk
因为apt已经没有源了,我们需要手动添加
sudo add-apt-repository ppa:openjdk-r/ppa
sudo apt-get update
sudo apt-get install openjdk-7-jdk
- 安装 python-webtest
sudo apt-get install python-webtest
- 下载apprtc源码
git clone https://github.com/webrtc/apprtc.git
cd apprtc
npm install
- 修改/apprtc/src/app_engine/constants该文件进行配置
#打洞服务器配置
TURN_BASE_URL = 'https://xx.xxx.xxxx.xx' //此处为局域网IP,下同
TURN_URL_TEMPLATE = '%s/turn?username=%s&key=%s'
CEOD_KEY = 'guolei'//与之后turn服务器配置中的配置一致
#ice服务器配置
ICE_SERVER_BASE_URL = 'https://xx.xxx.xxxx.xx'
ICE_SERVER_URL_TEMPLATE = '%s/v1alpha/iceconfig?key=%s'
ICE_SERVER_API_KEY = os.environ.get('ICE_SERVER_API_KEY')
#信令服务器配置,分配8089端口
WSS_INSTANCE_HOST_KEY = 'xx.xxx.xxxx.xx:8089'
WSS_INSTANCE_NAME_KEY = 'vm_name'
WSS_INSTANCE_ZONE_KEY = 'zone'
WSS_INSTANCES = [{
WSS_INSTANCE_HOST_KEY: 'xx.xxx.xxxx.xx:8089',
WSS_INSTANCE_NAME_KEY: 'wsserver-std',
WSS_INSTANCE_ZONE_KEY: 'us-central1-a'
}, {
WSS_INSTANCE_HOST_KEY: 'xx.xxx.xxxx.xx:8089',
WSS_INSTANCE_NAME_KEY: 'wsserver-std-2',
WSS_INSTANCE_ZONE_KEY: 'us-central1-f'
}]
-
下载依赖 GoogleAppEngine,需要翻墙
按照谷歌提供的方式,进行安装即可。 -
在apprtc目录下
grunt build
编译后得到out目录,查看constants是否生效。编译中可能出现报错
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: 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.
Aborteddue to warnings.
可以先wget https://bootstrap.pypa.io/ez_setup.py
,然后在pip install requests
,之后再次执行grunt build
应该是没什么问题的了。
- 开启房间服务
dev_appserver.py --host=0.0.0.0 ./out/app_engine
3.信令服务器搭建
- 安装依赖
sudo apt-get install golang-go
- 配置信令服务
home创建目录mkdir -p ~/collider_root
,并在该目录下创建src目录
设置环境变量export GOPATH=~/collider_root
将apprtc/src/collider目录下的三个文件夹都拷贝到collider_root/src下
进入到collider_root/src,开始编译安装collider,并准备好翻墙
go get collidermain
go install collidermain
编译成功后会在collider_root目录下生成bin和pkg目录,执行文件在bin下。
- 启动信令服务
修改collider_root/src/collidermain/main.go填上自己ip地址
var roomSrv = flag.String("room-server", "http://192.168.214.129:8080/", "The origin of the room server")
启动
~/collider_root/bin/collidermain -port=8089 -tls=false
4.打洞服务器
- 下载源码
可在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
sudo apt-get install gdebi-core
sudo gdebi coturn*.deb
或者直接使用sudo apt-get install coturn
安装
- 文件配置
sudo gedit /etc/default/coturn
将TURNSERVER_ENABLED=1
所在的最后一行删除
sudo gedit /etc/turnserver.conf
将以下内容添加到turnserver.conf
末尾,3478是coturn服务器端口号,user
和static-auth-secret
的自定义名称要和房间服务器constants.py
的CEOD_KEY
一致,0xd46cf788957ba8c2386411ba07f3133c
是通过turnadmin命令生成turnadmin -k -u guolei -r north.gov -p guolei
,前面的guolei
是用户名,后者为密码。
listening-device=eth0
listening-port=3478
relay-device=eth0
min-port=49152
max-port=65535
Verbose
fingerprint
lt-cred-mech
use-auth-secret
static-auth-secret=guolei
user=guolei:0xd46cf788957ba8c2386411ba07f3133c
user=guolei:guolei
stale-nonce
cert=/usr/local/etc/turn_server_cert.pem
pkey=/usr/local/etc/turn_server_pkey.pem
no-loopback-peers
no-multicast-peers
mobility
no-cli
- 生成coturn证书
sudo openssl req -x509 -newkey rsa:2048 -keyout /usr/local/etc/turn_server_pkey.pem-out/usr/local/etc/turn_server_cert.pem-days 99999 -nodes
- coturn服务器启动
service coturn start
- 基于coturn证书设置修改文件
将/apprtc/src/web_app/js/utils.js
文件下的requestIceServers函数改成以下内容:
function requestIceServers(iceServerRequestUrl, iceTransports) {
return new Promise(function(resolve, reject){
var servers = [{credential: "guolei",
username: "guolei",
urls: [ "turn:192.168.145.129:3478?transport=udp","turn:192.168.145.129:3478?transport=tcp" ]
},
{ urls:["stun:192.168.145.129:3478?transport=udp",
"stun:192.168.145.129:3478?transport=tcp"]
}];
resolve(servers);
});
}
其中guolei
和IP地址可以设置为自己的用户名和IP,即之前coturn设置的。更改后进入apprtc目录,重新grunt build
。
网友评论
HTTPError:HTTP Error 502:Server dropped connection
INFO 2018-05-29 05:13:58,186 module.py:846] default:"GET /HTTP/1.1" 500-
请问有遇到过吗?
#打洞服务器配置
TURN_BASE_URL = 'https://xx.xxx.xxxx.xx' //此处为局域网IP,下同
TURN_URL_TEMPLATE = '%s/turn?username=%s&key=%s'
CEOD_KEY = 'guolei'//与之后turn服务器配置中的配置一致
这几行 是自己填上的吧 在constants.js里吗?我看到默认的文档里没有呢