1、创建webrtc目录(服务器存放位置,发布时使用)php
cd /opt sudo mkdir webrtc sudo chmod 777 -R webrtc
2、安装nodejs
两种方式:node
sudo apt-get update sudo apt-get install nodejs-legacy nodejs sudo apt-get install npm
xz -d node-v8.9.1-linux-x64.tar.xz tar -xvf node-v8.9.1-linux-x64.tar
c. 创建软链接python
sudo ln -s /home/thf/node-v8.9.1-linux-x64/bin/node /usr/local/bin/node sudo ln -s /home/thf/node-v8.9.1-linux-x64/bin/npm /usr/local/bin/npm
3、安装Grunt环境
暂时关掉系统的代理
在ubuntu的“系统设置”的“网络设置"中将代理设置方式为none
重启
直接安装grunt-clilinux
sudo npm -g install grunt-cli
记得恢复代理为后续安装作准备
4、安装Python和jdknginx
sudo apt-get install python python-requests sudo apt-get install openjdk-8-jdk
5、安装Google App Engine SDK for Pythongit
sudo tar zxvf google-cloud-sdk-183.0.0-linux-x86_64.tar.gz -C /opt/webrtc sudo chmod 777 -R /opt/webrtc/google-cloud-sdk
sudo gedit /etc/profile
将路径添加到PATH项上github
export PATH=$PATH:/opt/webrtc/google-cloud-sdk/bin
6、下载服务器源码(房间服务器和信令服务器)golang
npm install
编译:web
grunt build --force
7、配置房间服务器
主要是src/app_engine目录下的apprtc.py和constants.py文件。
对于src/app_engine目录下的文件每次修改后需执行命令grunt build从新编译,
也能够直接编辑out/app_engine目录下的apprtc.py和constants.py避免从新编译。
修改constants.py,TURN_BASE_URL须要填写本机的ip地址(注意:使用localhost会有错误):数据库
#TURN_BASE_URL = 'https://computeengineondemand.appspot.com' TURN_BASE_URL = 'http://10.10.29.56:7002' #TURN_URL_TEMPLATE = '%s/turn?username=%s&key=%s' TURN_URL_TEMPLATE = '%s/turn.php?username=%s&key=%s' #CEOD_KEY = '4080218913' CEOD_KEY = '1234' #ICE_SERVER_BASE_URL = 'https://networktraversal.googleapis.com' ICE_SERVER_BASE_URL = 'http://10.10.29.56:7002' WSS_INSTANCES = [{ #WSS_INSTANCE_HOST_KEY: 'apprtc-ws.webrtc.org:443', WSS_INSTANCE_HOST_KEY: '10.10.29.56:7001', 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: '10.10.29.56:7001', WSS_INSTANCE_NAME_KEY: 'wsserver-std-2', WSS_INSTANCE_ZONE_KEY: 'us-central1-f' }]
修改apprtc.py:
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 = 'wss://' + wss_host_port_pair + '/ws' wss_url = 'ws://' + wss_host_port_pair + '/ws' #wss_post_url = 'https://' + wss_host_port_pair wss_post_url = 'http://' + wss_host_port_pair def make_pc_config(ice_transports): config = { #'iceServers': [], 'iceServers': [{"urls":"stun:10.10.29.56"},{"urls":"turn:lin@10.10.29.56","credential":"1234"}], 'bundlePolicy': 'max-bundle', 'rtcpMuxPolicy': 'require' }; if ice_transports: config['iceTransports'] = ice_transports return config
把原来的wss和https的scheme都改成ws和http,不要让客户端或者浏览器去使用SSL连接。如有第三方根证书的签名机构颁发的证书可忽略。
修改完后从新执行:
grunt build
export APPRTC_APP=/opt/webrtc/app_engine export HOST="--host=192.168.164.128" export PORT="--port=7000" dev_appserver.py $HOST $PORT --enable_host_checking false $APPRTC_APP
调试阶段可直接配置启动脚本指向/home/thf/Projects/apprtc-master/out/app_engine(这样就不用每次修改编译后要从新拷贝到opt目录下)
新建启动脚本startAppRtc.sh:
export APPRTC_APP=/home/thf/Projects/apprtc-master/out/app_engine export HOST="--host=192.168.164.128" export PORT="--port=7000" dev_appserver.py $HOST $PORT --enable_host_checking false $APPRTC_APP
若是GAE报白名单错误,则启动参数中添加:
--enable_host_checking false
8、安装GO环境
下载GO安装包并解压
wget https://storage.googleapis.com/golang/go1.9.2.linux-amd64.tar.gz --no-check-certificate tar xvf go1.9.2.linux-amd64.tar.gz sudo mv go /usr/lib
编辑打开文件/etc/profile(也可根据本身需求选择其余环境配置文件编辑),在文件末尾添加两行
export GOROOT=/usr/lib/go export PATH=$PATH:$GOROOT/bin
保存退出执行
source /etc/profile
9、配置信令服务器
sudo mkdir -p /opt/webrtc/collider_root sudo mkdir /opt/webrtc/collider_root/src sudo chmod 777 -R /opt/webrtc/collider_root
export GOPATH=/opt/webrtc/collider_root export PATH=$PATH:$GOPATH/bin
ln -sf ~/Projects/apprtc-master/src/collider/collider $GOPATH/src/ ln -sf ~/Projects/apprtc-master/src/collidermain $GOPATH/src/ ln -sf ~/Projects/apprtc-master/src/collider/collidertest $GOPATH/src/
//var roomSrv = flag.String("room-server", "https://appr.tc", "The origin of the room server") var roomSrv = flag.String("room-server", "http://10.10.29.56:7000", "The origin of the room server")
//e = server.ListenAndServeTLS("/cert/cert.pem", "/cert/key.pem") e = server.ListenAndServeTLS("/etc/nginx/apprtc.diveinedu.com.crt", "/etc/nginx/apprtc.diveinedu.com.key")
六、安装信令服务器依赖和collidermain
go get collidermain go install collidermain
若go get collidermain命令运行失败(https访问致使),那么则用下面这个麻烦的方法:
自行下载:https://www.golangtc.com/static/download/packages/golang.org.x.net.tar.gz
而后解压到/opt/webrtc/collider_root/src目录
tar xvf golang.org.x.net.tar.gz mv golang.org /opt/webrtc/collider_root/src cd $GOPATH/src go install golang.org/x/net/websocket/ go get collidermain go install collidermain
七、运行
/opt/webrtc/collider_root/bin/collidermain -port=7001 -tls=false
八、测试
go test collider
10、STUN/TURN/ICE服务器的搭建
sudo apt-get install libssl-dev libevent-dev
二、下载源码(详细阅读安装手册 INSTALL)
cd /home/thf/Projects wget http://turnserver.open-sys.org/downloads/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 sudo make install
sudo mkdir /etc/turnserver/
注: 这一步并非必须的,由于turnserver启动时能够指定任意目录的配置文件。
b) 拷贝conf配置脚本
进入turnserver目录
cd turnserver-4.5.0.7 sudo cp ./examples/etc/turnserver.conf /etc/turnserver/
注: 在 examples 目录下的此配置文件,每一个配置项均有说明,这样能够明白具体的参数含义;
此配置文件本身也能够新建,而后将后面章节中的内容直接粘贴进去;
c) 拷贝 pem 秘钥文件
为了作些明显的区分,咱们将*.pem秘钥文件也拷贝到/etc/turnserver/目录(也可由 openssl命令生成,这里咱们偷个懒,直接用默认的):
sudo cp ./examples/etc/turn_server_*.pem /etc/turnserver/
这里咱们拷贝的秘钥文件,将在上一步的 turnserver.conf 配置文件中指定。
d) 生成turnserver用户(可选)
经过turnadmin执行简单的命令,指定相应的用户名、密码、域名,既可将此帐号添加到turnserver的数据库中;
以下:
sudo turnadmin -a -u 用户名 -p 密码 -r 域名
执行成功后,经过turnadmin -l既可查看新建立的用户名及域名:
sudo turnadmin -a -u thf -p 123456 -r thf.com turnadmin -l thf[thf.com]代表建立成功!
其实这里咱们指定的密码和域名暂时都是可有可无的,由于后面咱们在启动turnserver时,能够经过相关参数,给其指定固定的域名和密码。
e) 配置 turnserver.conf
建议:将以前拷贝的 turnserver.conf 文件备份,并新建一个 turnserver.conf 文件,将一下内容拷贝进入:
#日志输出级别,turnserver 启动时加上 -v,能够获得更清晰的日志输出 Verbose #消息验证,WebRTC 的消息里会用到 #fingerprint #webrtc 经过 turn 中继,必须使用长验证方式 #lt-cred-mech # ICE REST API 认证须要 use-auth-secret # REST API 加密所需的 KEY # 这里咱们使用“静态”的 KEY,Google 本身也用的这个 static-auth-secret=1234 #用户登陆域,下面的写法能够不改变它,由于再启动 turnserver 时,能够经过指定参数覆盖它 realm=<填写你本身的域名> #可为 TURN 服务提供更安全的访问 stale-nonce # SSL 须要用到的, 生成命令: # sudo openssl req -x509 -newkey rsa:2048 -keyout /etc/turn_server_pkey.pem -out /etc/turn_server_cert.pem -days 99999 -nodes listening-ip=192.168.164.128 listening-port=7002 tls-listening-port=7002 #relay-ip=192.168.164.128 external-ip=192.168.164.128 relay-threads=50 use-auth-secret static-auth-secret=1234 #user=lin:1234 #user=xml:1234 #userdb=/etc/turnuserdb.conf max-bps=1000000 cert=/etc/turnserver/turn_server_cert.pem pkey=/etc/turnserver/turn_server_pkey.pem #max-bps=102400 pidfile="/var/run/turnserver.pid" log-file=/home/thf/Projects/turnserver-4.5.0.7/turn.log #屏蔽 loopback, multicast IP地址的 relay no-loopback-peers no-multicast-peers #启用 Mobility ICE 支持(不懂) mobility #禁用本地 telnet cli 管理接口 no-cli
turnserver -v -L 192.168.164.128 -a -f -r 192.168.164.128 -c /etc/turnserver/turnserver.conf
以上命令:经过 -v 指定日志输出级别; -L 指定用于绑定的网卡 IP 地址;-a 指定使用长期凭证机制,turn中继转发模式,必须使用长期凭证机制;-f 指定 turn 消息使用 fingerprint;-r 指定使用的域名,将覆盖 turnserver.conf 文件中的配置;-C 指定配置文件路径。
https://webrtc.github.io/samples/src/content/pee/rconnection/trickle-ice
检验打洞服务器是否正常
内网
room-server :10.10.29.56:7000
single_server:10.10.29.56:7001
turn_server :10.10.29.56:7002
注意:因本服务器搭建在虚拟机中,而主机处于局域网中,所以主机和虚拟机构成了第二级的局域网(不一样网络结构请注意根据本身的IP的配置关系来配置IP)。
本示例网络情况:
主机和虚拟机组成的局域网IP分别为:
主机:192.168.164.1
虚拟机:192.168.164.128
主机所处的局域网中主机的IP:10.10.29.56
因此
本例的STUN/TURN/ICE服务器的打洞功能没有通过外网的实际检测,须要进一步验证。
错误处理:
python2.7/urllib2.py", line 1198, in do_open raise URLError(err) URLError:<urlopen error [Errno 111] Connection refused>
处理方式: 关掉系统的代理 在ubuntu的“系统设置”的“网络设置"中将代理设置方式为none