his系统开发语言(webrtc服务器搭建方法)

前言

在前面的WebRTC介绍中我们已经介绍了WebRTC的编译以及成功地把WebRTC在Android Studio中运行了起来,详情请猛击<WebRTC之Android编译>《WebRTC导入Android Studio》

在后面的学习过程中,我们将进一步使用WebRTC实现Android端的实时通信对话。为了方便后续的开发和测试,今天我们来搭建WebRTC的服务器环境。

安装环境

笔者使用的云服务器是Ubuntu 16.04。

注意尽量使用与笔者相同版本的系统,不然可能因为安装的各种环境版本不同而导致搭建失败

需要在云服务器后台开放(出入规则)端口: 3478、8080、8089、80、443

1、安装JDK

#如果是全新的系统则需要更新一下aptapt-getupdateapt-getupgrade#安装JDK8apt-getinstallopenjdk-8-jdk#检测下java是否安装成功,如果成功输出版本号则安装成功java-version

2、安装node.js

aptinstallnodejs-legacy#查看一下版本v4.2.6node–versionapt-getinstallnpm#查看一下版本3.5.2npm–version#安装gnurt,尽量带上版本号,不然可能报node版本太低的错npm-ginstallgrunt-cli@1.3.2#查看下版本grunt-cliv1.3.2grunt–version

3、安装Python和Python-webtest (python2.7)

apt-getinstallpythonapt-getinstallpython-webtestpython-V#Python2.7.12

4、安装go

aptinstallgolang-go#查看版本goversiongo1.6.2linux/amd64goversion#创建go工作目录mkdir-p/root/webrtc/goWorkspace/src#配置环境变量:在/etc/profile文件最后增加一行:exportGOPATH=/root/webrtc/goWorkspace#刷新一下环境变量source/etc/profile

在使用vi命令行的时候可能会遇到方向键乱位的问题,由于ubuntu 预安装的是tiny版本,所以会导致我们在使用时候产生上述不便,但是我们安装vim的full版本后,键盘所在键在vi下就很正常了。解决方法:卸载tiny 版本 sudo apt-get remove vim-common,安装full 版本 sudo apt-get install vim

5、安装google_appengine

#当前目录:root/webrtc/wgethttps://storage.googleapis.com/appengine-sdks/featured/google_appengine_1.9.40.zip#安装unzipapt-getinstallunzipunzipgoogle_appengine_1.9.40.zip#配置环境变量:在/etc/profile文件最后增加一行:exportPATH=$PATH:/root/webrtc/google_appenginesource/etc/profile

6、安装libevent

#当前目录:root/webrtc/#https://github.com/coturn/coturn/wiki/CoturnConfigwgethttps://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gztarxvflibevent-2.0.21-stable.tar.gzcdlibevent-2.0.21-stable./configuremakemakeinstall

7、安装apprtc

#当前目录:root/webrtc/#注意如果没有git的话,需要aptinstallgit安装一下gitgitclonegit://github.com/webrtc/apprtc.git#将collider的源码软连接到go的工作目录下ln-s/root/webrtc/apprtc/src/collider/collider$GOPATH/srcln-s/root/webrtc/apprtc/src/collider/collidermain$GOPATH/srcln-s/root/webrtc/apprtc/src/collider/collidertest$GOPATH/src#编译collidermain,需要你懂的上网gogetcollidermaingoinstallcollidermain

在执行go get collidermain由于众所周知的原因可能导致无法下载,可能会报以下的错误:

#报错:packagegolang.org/x/net/websocket:unrecognizedimportpath”golang.org/x/net/websocket”

这时候我们只要单独使用git下载net即可:

mkdir-p$GOPATH/src/golang.org/x/cd$GOPATH/src/golang.org/x/gitclonegit://github.com/golang/net.gitnetgoinstallnet#重新获取一下collidermaingogetcollidermaingoinstallcollidermain

8、安装coturn

#目录:root/webrtc/#https://github.com/coturn/coturn/wiki/Downloadswgethttp://coturn.net/turnserver/v4.5.0.7/turnserver-4.5.0.7.tar.gztarxvfzturnserver-4.5.0.7.tar.gzcdturnserver-4.5.0.7./configuremakeinstall配置运行服务器

1、coturn Nat穿透服务器

注意这里需要设置一下用户名和密码,后面会配置apprtc的时候需要使用到。

#启动内网ip,这个是172开头的,在你云服务器的后台可以查询到,比如笔者的是172.16.16.4,用户名设置为flyer,密码为123456nohupturnserver-L172.16.16.4-a-uflyer:123456-v-f-rnort.gov&#可以通过命令lsof-i:3478查询下是否启动成功,成功的话一般会输出以下信息#COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAME#turnserve14754root16uIPv41122320t0UDPinstance-5i00bk4l:3478#turnserve14754root17uIPv41122330t0UDPinstance-5i00bk4l:3478#turnserve14754root32uIPv41122630t0TCPinstance-5i00bk4l:3478(LISTEN)#turnserve14754root33uIPv41122670t0TCPinstance-5i00bk4l:3478(LISTEN)

2、collider 信令服务器

配置防火墙,允许访问8089端口(tcp,用于客户端和collider建立websocket信令通信)

#创建自签名的数字证书,如果没有openssl,需要安装mkdir-p/certcd/cert#CA私钥opensslgenrsa-outkey.pem2048#自签名证书opensslreq-new-x509-keykey.pem-outcert.pem-days1095nohup$GOPATH/bin/collidermain-port=8089-tls=true-room-server=”https://你服务器的公网ip:8080″&#使用命令lsof-i:8089检查下是否启动成功,如果成功则会输出以下相似的信息#COMMANDPIDUSERFDTYPEDEVICESIZE/OFFNODENAME#colliderm14817root3uIPv61129690t0TCP*:8089(LISTEN)

3、搭建apprtc房间服务器

主要是修改配置文件/root/webrtc/apprtc/src/app_engine/constants.py中的相关参数即可:

注意这里就需要使用到前面配置coturn Nat穿透服务器时锁设置的用户名和密码

首先修改穿透服务器配置:

修改前#ICE_SERVER_OVERRIDE=[#{#”urls”:[#”turn:hostname/IpToTurnServer:19305?transport=udp”,#”turn:hostname/IpToTurnServer:19305?transport=tcp”#],#”username”:”TurnServerUsername”,#”credential”:”TurnServerCredentials”#},#{#”urls”:[#”stun:hostname/IpToStunServer:19302″#]#}#]#修改后ICE_SERVER_OVERRIDE=[{“urls”:[“turn:你服务器的公网ip:3478?transport=udp”,”turn:你服务器的公网ip:3478?transport=tcp”],”username”:”coturnNat穿透服务器的用户名”,”credential”:”coturnNat穿透服务器密码”},{“urls”:[“stun:你服务器的公网ip:3478”]}]

然后修改ICE配置:

#未修改前ICE_SERVER_BASE_URL=’https://appr.tc’#修改后ICE_SERVER_BASE_URL=’https://你服务器的公网ip’

最后修改WSS_INSTANCE_HOST_KEY:

#修改前WSS_INSTANCE_HOST_KEY=’host_port_pair’WSS_INSTANCE_NAME_KEY=’vm_name’WSS_INSTANCE_ZONE_KEY=’zone’WSS_INSTANCES=[{WSS_INSTANCE_HOST_KEY:’apprtc-ws.webrtc.org:443′,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_NAME_KEY:’wsserver-std-2′,WSS_INSTANCE_ZONE_KEY:’us-central1-f’}]#修改后WSS_INSTANCE_HOST_KEY=’你服务器的公网ip:8089’WSS_INSTANCE_NAME_KEY=’vm_name’WSS_INSTANCE_ZONE_KEY=’zone’WSS_INSTANCES=[{WSS_INSTANCE_HOST_KEY:’你服务器的公网ip:8089′,WSS_INSTANCE_NAME_KEY:’wsserver-std’,WSS_INSTANCE_ZONE_KEY:’us-central1-a’}]

最后修改完成保存即可。

编译下apprtc

#编译cd/root/webrtc/apprtc#以下这一步可能会报错,提示node版本太低#如果报错我们需要使用npminstall-gn和sudonstable更新以下node然后再继续执行以下命令即可npminstall–no-fund#这一步有可能报错,下面有解决方法gruntbuild

在上面执行grunt build的时候有可能会报错提示requests模块不存在,我们使用pip安装一下即可,

报错信息:

ImportError: No module named requests
Warning: Command failed: 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, inimport requests
ImportError: No module named requests
Use –force to continue.

Aborted due to warnings.

#####安装pipcd/root/webrtcwgethttps://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg–no-check-certificatechmod xsetuptools-0.6c11-py2.7.egg./setuptools-0.6c11-py2.7.eggwgethttps://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gztar-xfpip-1.5.4.tar.gzcdpip-1.5.4pythonsetup.pyinstallpipinstallrequests#安装完成后再执行编译:cd/root/webrtc/apprtc#重新执行下编译gruntbuild

启动apprtc

#注意以下内网ip是172开头的nohupdev_appserver.py–host=服务器的内网ip/root/webrtc/apprtc/out/app_engine–skip_sdk_update_check&

到了这一步WebRTC的服务器基本就算搭建完成了,这时候在你的浏览器输入http://服务器公网IP:8080/如果能顺利打开,那么恭喜你环境算是搭建成功啦!!!

4、安装nginx代理https

为什么需要安装nginx,因为chrome浏览器不支持在非https方式下打开音/视频设备。而且apprtc中的信令服务器(collider)也不支持非 https 服务。

但是我们在前面配置中都是使用http的服务,没有直接配置成https的,因此我们需要使用nginx做一次代理,实现https的服务。当然如果在前面的配置中我们直接使用https的服务,那么这一步就没有必要了,但是需要我们有第三方的证书,而不是使用私有证书。

下面下载安装以下nginx:

#下载nginxwgwthttp://nginx.org/download/nginx-1.16.1.tar.gz#解压tarxvfnginx-1.16.1.tar.gz#安装PCREapt-getinstalllibpcre3-devcdnginx-1.16.1./configure–with-http_ssl_modulemakeinstall#默认安装在/usr/local/nginx#配置nginx.confvim/usr/local/nginx/conf/nginx.conf

修改nginx配置/usr/local/nginx/conf/nginx.conf:

events{worker_connections1024;}http{upstreamroomserver{server你服务器的公网ip:8080;}server{listen80;server_name你服务器的公网ip;return301https://$server_name$request_uri;}server{root/usr/share/nginx/html;indexindex.phpindex.htmlindex.htm;listen443ssl;ssl_certificate/cert/cert.pem;ssl_certificate_key/cert/key.pem;server_name4你服务器的公网ip;location/{proxy_passhttp://roomserver$request_uri;proxy_set_headerHost$host;}location~.php${fastcgi_passunix:/var/run/php5-fpm.sock;fastcgi_indexindex.php;includefastcgi_params;}}}

启动nginx:

/usr/local/nginx/sbin/nginx

这时候再次在浏览器输入服务器的ip就能打开apprtc了,打开后大概如图这样子的:

his系统开发语言(webrtc服务器搭建方法)

吐槽两句

不得不说为了准备一个WebRTC的开发测试环境还是有点坑的,虽然说按照步骤来不难,但是需要搭建的内容实在是太多,而且极容易一步错步步错。

笔者也是尝试了好几天,查了很多的资料做了很多尝试才搭建成功。最后还是为互联网人的网络不能互联而WTF发泄一下…

共勉!!!

发表评论

登录后才能评论