布署AppRTC服务

AppRTC是WebRTC视頻语音通话的系统服务,一般能够将其做为参照完成,构建AppRTC服务受到限制于许多标准,其实不是太非常容易。在参照了官方网实际操作和很多的blog以后,依据自身实际操作实践活动清除了许多互联网blog上的不正确方式,总算布署取得成功了一套自然环境。检测自然环境为阿里巴巴云的CentOS 7网络服务器,带公网IP和网站域名。


公网网络服务器,假如非公网就只有在局域网络玩玩了,这里暂未探讨局域网络SSL资格证书,由于WebRTC务必在HTTPS自然环境下应用,因而通讯WebSocket也务必适用

假如沒有资格证书,可是有网站域名得话,能够去申请办理完全免费的资格证书,实际百度搜索 Let’s Encrypt。本blog应用了Caddy网络服务器,此网络服务器可自主全自动申请办理其资格证书,其资格证书储放在


下,按站点网站域名储放,假定此次布署应用的& 网站域名,相匹配 8.8.8.8,其资格证书储放在


下,包括公匙文档&.cert 和私钥文档&.key 文档。


和 8.8.8.8 是网站域名和相匹配的IP,这里为举例说明,抹除了我的真正的详细地址。


apprtc GAE的Python和NodeJS开发设计的屋子网络服务器collider golang开发设计的信令网络服务器coturn c語言开发设计的stun/turn网络服务器
yum install python #规定2.7版本号
curl -sL setup_10.x | bash #安裝较为高的10版本号
npm -g install grunt-cli #grunt专用工具
yum install gcc-c++ make #C/C++编译程序器等
yum install golang #golang编译程序器
yum install java-1.8.0-openjdk #安裝JDK,我挑选了1.8版本号
yum install libevent-devel #编译程序coturn必须
yum install git #能够免费下载Github源代码
yum install sqlite-devel #编译程序coturn必须

准确的讲必须安裝的是 Google app engine SDK for Python,可是由于大家都知道的缘故,大家其实不能立即浏览,可是我在别的地区得知了一个较为老的免费下载详细地址,能够线下安裝,并且是能够免费下载的


wget dl/cloudsdk/channels/rapid/downloads/google-cloud-sdk-188.0.1-linux-x86_64.tar.gz

尽管这一是Google Cloud SDK,可是发了现的确是能够用,而且能够升级,估算是如今开展了融合吧


tar xzvf google-cloud-sdk-188.0.1-linux-x86_64.tar.gz
./google-cloud-sdk/ponents update

这在其中由于 AppRTC 是用GAE的Python开发设计的,依靠Python 2.7自然环境。听说如今适用了3.7版本号了,由于不可以上宫网,不确定性。


由于coturn是务必依靠的部件,大家优先选择解决这一,这一手机软件其实不在库房中,其依靠的libevent的版本号与库房中的一致,其实不必须独立编译程序,因而只必须免费下载编译程序这一手机软件就可以


由于这一手机软件中带了RPM的搭建脚本制作,因而我这儿准备开展RPM包的搭建,最先安裝RPM搭建专用工具


wget coturn/coturn/archive/4.5.1.1.tar.gz
mkdir -p ~/rpmbuild/SOURCES
mv 4.5.1.1.tar.gz -p ~/rpmbuild/SOURCES/turnserver-4.5.1.1.tar.gz
rpmbuild -ta ~/rpmbuild/SOURCES/turnserver-4.5.1.1.tar.gz

等搭建取得成功后,会在 ~/rpmbuild/RPMS/x86_64 文件目录下达现很多安裝包,只必须安裝 turnserver 就可以


Collider是Go开发设计的服务,依靠websocket,仍然不可以浏览其详细地址。因而只有免费下载镜像系统安裝,这里以将Go的自然环境设定确当前客户文件目录下的go文件目录为例子表明。此外Collider的编码在AppRTC当中,因而这里就立即免费下载AppRTC的源代码了,事后不用免费下载了。


export GOPATH=$HOME/go
mkdir -p ~/go/src
git clone apprtc/apprtc
ln -s `pwd`/apprtc/src/collider/collider $GOPATH/src
ln -s `pwd`/apprtc/src/collider/collidermain $GOPATH/src
ln -s `pwd`/apprtc/src/collider/collidertest $GOPATH/src
mkdir -p $GOPATH//x
cd $GOPATH//x
git .git
go get collidermain
go install collidermain

留意,下边全部出示互联网的服务,要留意防火安全墙配备,非常是UDP端口号,检测服务平台关掉了防火安全墙。


mkdir /cert
openssl req -x509 -newkey rsa:2048 -keyout /cert/turn_server_pkey.pem -out /cert/turn_server_cert.pem -days 99999 -nodes

实行以后会转化成一个key,记牢这一key,立刻要采用。编写 /etc/turnserver/turnserver.conf 文档,这一文档大部分分的作用都默认设置是注解的,因而基本寻找出處开展改动,大约以下


listening-ip=8.8.8.8
listening-port=3478
relay-ip=8.8.8.8
tls-listening-port=5349
external-ip=8.8.8.8
Verbose
fingerprint
lt-cred-mech
use-auth-secret
static-auth-secret=apprtc
user=apprtc:0x949534a397bcf2e88470c86ad3749d9c(更换成上边的key)
user=apprtc:apprtc
cert=/cert/turn_server_cert.pem
pkey=/cert/turn_server_pkey.pem

留意,许多实例教程说要配备 TRUN REST API,即自身必须完成个REST API服务,让AppRTC开展查寻获得,根据剖析和检测,发觉第一这一服尽量须是POST恳求的,实际文件格式参照规范,第二是其实不必须这一API也可以一切正常应用,因而请不必瞎折腾REST API了。


cd /var/lib/caddy/acme/acme-v02.//
.cert cert.pem
.key key.pem
chmod 755 /cert/*

留意,大家设定的这一服务的端口号是8089端口号,AppRTC默认设置的HTTP端口号是8080,HTTPS端口号是8081,可是具体检测中发觉AppRTC在应用HTTPS的时,会常常SSL出现异常,未查清缘故。


配备AppRTC的配备文档 ~/apprtc/src/app_engine/constants.py 文档以下(仅列举改动项)


ICE_SERVER_OVERRIDE = [
{
urls : [
turn:8.8.8.8:3478?transport=udp ,
turn:8.8.8.8:3478?transport=tcp
],
username : apprtc ,
credential : 0x949534a397bcf2e88470c86ad3749d9c #更换成上边的key
},
{
urls : [
stun:8.8.8.8:3478
]
}
]

ICE_SERVER_BASE_URL =
ICE_SERVER_URL_TEMPLATE =
ICE_SERVER_API_KEY = os.environ.get( ICE_SERVER_API_KEY )

# Dictionary keys in the constant.
WSS_INSTANCE_HOST_KEY = :8089
WSS_INSTANCE_NAME_KEY = vm_name
WSS_INSTANCE_ZONE_KEY = zone
WSS_INSTANCES = [{
WSS_INSTANCE_HOST_KEY: :8089 ,
WSS_INSTANCE_NAME_KEY: wsserver-std ,
WSS_INSTANCE_ZONE_KEY: us-central1-a
}]

上边的配备早已能够确保应用了,且在指令行特定SSL资格证书后,就可以出示服务了,可是因为以前提及了SSL出现异常难题,即便在转换到HTTP以后并应用nginx代理商后,出現了URL不配对的不正确,因而还不可以立即应用,以便处理上边的难题,我改动了编码,最先配备 ~/apprtc/src/app_engine/constants.py 改动


这儿假定nginx代理商的详细地址是&:9090 ,随后改动该文件目录下的 apprtc.py 文档,大约在300行上下,改动在其中room_link的取值为


cd ~/apprtc
grunt build
cd ~
google-cloud-sdk/bin/dev_appserver.py ~/apprtc/out/app_engine/ dev_appserver_log_level debug < {
# }
#}

server {
listen 9090 ssl default_server;
;
ssl_certificate /cert/cert.pem
ssl_certificate_key /cert/key.pem
location /{
proxy_pass >

配备默认设置注解了原先默认设置配备的80端口号的配备,加上了一个9090的代理商服务,配备以后起动服务

<网页页面中自定了一些配备主要参数,能够在URL中自定WebRTC的主要参数,例如开启超清拍摄头、关掉声频这些,实际参照这一网页页面就可以。


视频语音很清楚无噪声,2个客户应用手机上外放离的靠近的情况下,将会是回音清除的缘故会出噪声视頻觉得实际效果一般般,网络带宽占有都不高,终究是P2P方式,但其实不是非常清楚总体觉得和手机微信视頻类似,将会稍好一点并沒有寻找检测turn的自然环境,这一自然环境下的实际效果不清晰