前言
本次是在虚拟机裸机centos 搭建apprtc,主要也是为了研究webrtc的应用
apprtc环境配置
apprtc的搭建,以及源码的存放都放在、root下的webrtc,所有操作均需要root权限,所以在搭建之前切换到root权限,apprtc源码包含信令服务器,Turn/Stun服务以及apprtc房间服务,所以安装的环境会比较多
1、新建存放目录,执行以下命令
[root@localhost ~]# mkdir webrtc
[root@localhost ~]# cd webrtc
[root@localhost webrtc]# pwd
/root/webrtc
2、安装JDK以及配置
2.1 jak1.8.0版本就可以用了,所以本次直接安装,执行下面语句
yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel
2.2 安装完之后,配置jdk环境, vim /etc/profile打开,在最后一行添加下面三条语句
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.el7_9.x86_64
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/jre/lib:$JAVA_HOME/lib:$JAVA_HOME/lib/tools.jar
备注:如果不知道JAVA_HOME的路径可以用:dirname $(readlink $(readlink $(which java))) 来查看安装路径
[root@localhost ~]# dirname $(readlink $(readlink $(which java)))
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.312.b07-1.el7_9.x86_64/jre/bin
配置好之后需要执行:source /etc/profile 让配置生效
1.3 接下来就是测试安装配置是否正常
[root@localhost webrtc]# java -version
openjdk version "1.8.0_312"
OpenJDK Runtime Environment (build 1.8.0_312-b07)
OpenJDK 64-Bit Server VM (build 25.312-b07, mixed mode)
这样jdk就算安装完成
3、安装配置node.js
3.1 安装 git和ant
[root@localhost webrtc]# yum install git
[root@localhost webrtc]# yum install ant
3.2 安装node.js
[root@localhost webrtc]# wget https://nodejs.org/dist/v10.15.3/node-v10.15.3-linux-x64.tar.xz
[root@localhost webrtc]# tar -xvf ./node-v10.15.3-linux-x64.tar.xz
[root@localhost webrtc]# ln -s /usr/local/node-v10.14.1-linux-x64/bin/node /usr/local/bin/node
[root@localhost webrtc]# ln -s /usr/local/node-v10.14.1-linux-x64/bin/node /usr/local/bin/node
查看node版本,npm版本
[root@localhost webrtc]# node -v && npm -v
v10.15.3
6.4.1
[root@localhost webrtc]# node
>
这样说明安装完成了
3.3 安装grunt-cli
[root@localhost webrtc]# npm -g install grunt-cli
[root@localhost webrtc]# grunt --version
grunt-cli v1.4.3
到这里node.js就安装完成了
4、安装Python和Python-webtest
4.1 安装Python
由于python 2.7不在维护,所以本次还是安装python 3版本
[root@localhost webrtc]# yum install epel-release -y
[root@localhost webrtc]# yum install -y python36
[root@localhost webrtc]# python3.6 -m ensurepip
[root@localhost webrtc]# python3 --version
Python 3.6.8
这时候 python3 就装好了
4.2 安装python-webtest
[root@localhost webrtc]# yum install python-webtest
5、安装google_appengine
[root@localhost webrtc]# wget https://storage.googleapis.com/appengine-sdks/featured/google_appengine_1.9.40.zip
[root@localhost webrtc]# unzip google_appengine_1.9.40.zip
配置环境变量:在/etc/profile文件最后增加一行
export PATH=$PATH:/root/webrtc/google_appengine
执行:source /etc/profile 让配置生效
6、安装go
[root@localhost webrtc]# yum install epel-release -y
[root@localhost webrtc]# yum install go -y
[root@localhost webrtc]# go version
go version go1.15.14 linux/amd64
安装完成之后需要配置go的工作目录
[root@localhost webrtc]# mkdir -p /root/webrtc/goworkspace/src
接下来急救室配置go环境变量:在/etc/profile 文件最后增加一行:
export GOPATH=/root/webrtc/goworkspace
执行:source /etc/profile 让配置生效
7、安装libevent
[root@localhost webrtc]# wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
[root@localhost webrtc]# tar xf libevent-2.0.21-stable.tar.gz
[root@localhost webrtc]# cd libevent-2.0.21-stable
[root@localhost libevent-2.0.21-stable]# ./configure
[root@localhost libevent-2.0.21-stable]# make install
8、安装apprtc项目
8.1 下载apprtc
[root@localhost webrtc]# git clone https://github.com/webrtc/apprtc.git
8.2 安装coturn
路径在webrtc
[root@localhost webrtc]# yum install openssl-deve
[root@localhost webrtc]# wget http://coturn.net/turnserver/v4.5.0.7/turnserver-4.5.0.7.tar.gz
[root@localhost webrtc]# tar xfz turnserver-4.5.0.7.tar.gz
[root@localhost webrtc]# cd turnserver-4.5.0.7
[root@localhost turnserver-4.5.0.7]# ./configure
[root@localhost turnserver-4.5.0.7]# make install
[root@localhost turnserver-4.5.0.7]# ./configure --enable-static
配置turnserver
配置防火墙,允许3478端口穿透(为了测试方便,我们先关闭防火墙)
systemctl stop firewalld.service
安装完成之后,后台启动conturn(记得要修改自己的IP)
[root@localhost webrtc]# nohup turnserver -L 192.168.239.130 -a -u root:123456 -v -f -r nort.gov > /root/webrtc/turnserver.log 2>&1 &
账号root,密码123456 可以随便设置,这个是后面配置房间服务器的时候需要用到
查看是否安装成功
[root@localhost webrtc]# netstat -tunlp | grep turnserver
tcp 0 0 192.168.239.130:3478 0.0.0.0:* LISTEN 20756/turnserver
tcp 0 0 192.168.239.130:5349 0.0.0.0:* LISTEN 20756/turnserver
tcp 0 0 127.0.0.1:5766 0.0.0.0:* LISTEN 20756/turnserver
udp 0 0 192.168.239.130:5349 0.0.0.0:* 20756/turnserver
udp 0 0 192.168.239.130:5349 0.0.0.0:* 20756/turnserver
udp 0 0 192.168.239.130:3478 0.0.0.0:* 20756/turnserver
udp 0 0 192.168.239.130:3478 0.0.0.0:* 20756/turnserver
coturn启动成功
8.3 collider安装配置
配置防火墙,允许访问8089端口(已经关闭防火墙,可以先忽略)
由于apprtc中collider是用go写的,所以必须将源码软连接到go的工作目录下
[root@localhost webrtc]# ln -s /root/webrtc/apprtc/src/collider/collider $GOPATH/src
[root@localhost webrtc]# ln -s /root/webrtc/apprtc/src/collider/collidermain $GOPATH/src
[root@localhost webrtc]# ln -s /root/webrtc/apprtc/src/collider/collidertest $GOPATH/src
接下来开始编译collidermain
[root@localhost webrtc]# go get collidermain
[root@localhost webrtc]# go install collidermain
编译问题:
报错: package golang.org/x/net/websocket: unrecognized import path "golang.org/x/net/websocket"
按顺序直接执行以下语句
[root@localhost webrtc]# mkdir -p $GOPATH/src/golang.org/x/
[root@localhost webrtc]# cd $GOPATH/src/golang.org/x/
[root@localhost x]# git clone https://github.com/golang/net.git net
[root@localhost x]# go install net
配置
安装openssl-devel ,用来创建签名证书(本次证书是存在 /cert)
[root@localhost webrtc]# yum install openssl-devel
[root@localhost webrtc]# mkdir -p /cert
[root@localhost webrtc]# 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="http://192.168.239.130:8090" &
netstat -ntulp | grep collider
测试是否开启成功
[root@localhost webrtc]# netstat -tunlp | grep collider
tcp6 0 0 :::8089 :::* LISTEN 20744/collidermain
说明已经成功启动了
8.4 apprtc 房间服务器安装配置
配置防火墙,允许访问8089端口(已经关闭防火墙,可以先忽略)
配置文件路径:/root/webrtc/apprtc/src/app_engine/constants.py
修改内容如下(记得IP要修改自己的IP地址)
A.注释掉 ICE_SERVER_OVERRIDE = None
B.手动配置ICE_SERVER_OVERRIDE 里面的turn和stun地址
C.配置ICE_SERVER_BASE_URL为本地IP地址
D.配置WSS_INSTANCE_HOST_KEY配置为192.168.239.130:8089
E.配置WSS_INSTANCES 里面是配置信令服务器的地址,有2个可以注释一个
具体修改内容:
# Turn/Stun server override. This allows AppRTC to connect to turn servers
# directly rather than retrieving them from an ICE server provider.
#ICE_SERVER_OVERRIDE = None
# Enable by uncomment below and comment out above, then specify turn and stun
ICE_SERVER_OVERRIDE=[
{
"urls": [
"turn:192.168.239.130:3478?transport=udp",
"turn:192.168.239.130:3478?transport=tcp"
],
"username": "root",
"credential": "123456"
},
{
"urls": [
"stun:192.168.239.130:3478"
]
}
]
ICE_SERVER_BASE_URL = 'http://192.168.239.130'
ICE_SERVER_URL_TEMPLATE = '%s/v1alpha/iceconfig?key=%s'
ICE_SERVER_API_KEY = os.environ.get('ICE_SERVER_API_KEY')
HEADER_MESSAGE = os.environ.get('HEADER_MESSAGE')
ICE_SERVER_URLS = [url for url in os.environ.get('ICE_SERVER_URLS', '').split(',') if url]# Dictionary keys in the collider instance info constant.
WSS_INSTANCE_HOST_KEY = '192.168.239.130:8089'
WSS_INSTANCE_NAME_KEY = 'vm_name'
WSS_INSTANCE_ZONE_KEY = 'zone'
WSS_INSTANCES = [{
WSS_INSTANCE_HOST_KEY: '192.168.239.130:8089',
WSS_INSTANCE_NAME_KEY: 'wsserver-std',
WSS_INSTANCE_ZONE_KEY: 'us-central1-a'
}
#, {
# WSS_INSTANCE_HOST_KEY: '192.168.239.130:8089',
# WSS_INSTANCE_NAME_KEY: 'wsserver-std-2',
# WSS_INSTANCE_ZONE_KEY: 'us-central1-f'
#}
]
修改完成之后要编译(每次修改都要编译)
执行下面语句
cd /root/webrtc/apprtc
npm install
grunt build
编译成功就可以启动房间服务器了
启动命令
nohup /root/webrtc/google_appengine/dev_appserver.py --host=192.168.239.130 --port=8080 /root/webrtc/apprtc/out/app_engine --skip_sdk_update_check &
测试
A.检测是否启动成功 netstat -tunlp | grep python
tcp 0 0 192.168.239.130:8080 0.0.0.0:* LISTEN 20752/python
tcp 0 0 127.0.0.1:33878 0.0.0.0:* LISTEN 20776/python
tcp 0 0 127.0.0.1:43262 0.0.0.0:* LISTEN 20752/python
tcp 0 0 127.0.0.1:8000 0.0.0.0:* LISTEN 20752/python
tcp6 0 0 ::1:33878 :::* LISTEN 20776/python
tcp6 0 0 ::1:43262 :::* LISTEN 20752/python
tcp6 0 0 ::1:8000 :::* LISTEN 20752/python
B. 直接用本地浏览器 登录 http://192.168.239.130:8080/
9、配置nginx
配置nginx是为了能够支持https来访问apprtc,如果不能支持https访问,可会导致客户端无法采集音频视频的采集
安装参照:
我的nginx是安装在/usr/local/nginx/
配置文件在 /usr/local/nginx/conf/nginx.conf
具体修改:
upstream roomserver {
server 192.168.239.130:8080;
}
server {
listen 80;
server_name 192.168.239.130;
return 301 https://$server_name$request_uri;}
server {
root /usr/local/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 192.168.239.130;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;
}}
websocket代理
在nginx配置目录下创建conf.d目录
mkdir /usr/local/nginx/conf/conf.d
创建编辑websocket代理配置文件
vim /usr/local/nginx/conf/conf.d/websocket_proxy.conf
添加一下内容:
map $http_upgrade $connection_upgrade {
default upgrade;
'' close;
}upstream websocket {
server 192.168.239.130;
}server {
listen 8088;
ssl on;
ssl_certificate /cert/cert.pem;
ssl_certificate_key /cert/key.pem;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
server_name easywebrtc.com;
#access_log /var/log/nginx/test_websocket.access.log;location / {
proxy_pass https://websocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;}
}
添加完成之后保存退出,nginx配置文件 http配置部分最后一行添加
include /usr/local/nginx/conf/conf.d/*.conf;
启动nginx :/usr/local/nginx/sbin/nginx
如果之前已经启动,这需要重新读取配置文件或者重启启动
解决跨域问题
浏览器通话跨域问题 :pushState
Messages:Failed to start signaling: Failed to execute 'pushState' on 'History'
解决方法
修改文件/root/webrtc/apprtc/src/web_app/js/appcontroller.js
vim /root/webrtc/apprtc/src/web_app/js/appcontroller.js
#搜索 displaySharingInfo_ 大概是445行displaySharingInfo_函数第一行添加
roomLink=roomLink.replace("http","https");
修改之后如下:
到这里所有的配置也就都完成了,开始测试整体效果
测试之前为了保证编辑的内容都得到更新,先关闭apprtc,重新编译,在启动
cd /root/webrtc/apprtc
go get collidermain
go install collidermain
grunt build
开始测试效果
在本地Chome浏览器输入:https://192.168.239.130/