前言
在前面的WebRTC介紹中咱們已經介紹了WebRTC的編譯以及成功地把WebRTC在Android Studio中運行了起來,詳情請猛擊<WebRTC之Android編譯>《WebRTC導入Android Studio》php
在後面的學習過程當中,咱們將進一步使用WebRTC實現Android端的實時通訊對話。爲了方便後續的開發和測試,今天咱們來搭建WebRTC的服務器環境。html
安裝環境
筆者使用的雲服務器是Ubuntu 16.04。java
注意儘可能使用與筆者相同版本的系統,否則可能由於安裝的各類環境版本不一樣而致使搭建失敗node
須要在雲服務器後臺開放(出入規則)端口: 347八、8080、808九、80、443python
本服務器的搭建教程主要來源於WebRTC的開源項目apprtc:https://github.com/webrtc/apprtclinux
一、安裝JDKnginx
#若是是全新的系統則須要更新一下apt
apt-get update
apt-get upgrade
# 安裝JDK8
apt-get install openjdk-8-jdk
# 檢測下java是否安裝成功,若是成功輸出版本號則安裝成功
java -version
二、安裝node.jsgit
apt install nodejs-legacy
# 查看一下版本 v4.2.6
node --version
apt-get install npm
# 查看一下版本 3.5.2
npm --version
# 安裝gnurt,儘可能帶上版本號,否則可能報node版本過低的錯
npm -g install grunt-cli@1.3.2
# 查看下版本 grunt-cli v1.3.2
grunt --version
三、安裝Python和Python-webtest (python2.7)github
apt-get install python
apt-get install python-webtest
python -V
#Python 2.7.12
四、安裝gogolang
apt install golang-go
# 查看版本 go version go1.6.2 linux/amd64
go version
#建立go工做目錄
mkdir -p /root/webrtc/goWorkspace/src
#配置環境變量:在/etc/profile文件最後增長一行:
export GOPATH=/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
五、安裝google_appengine
#當前目錄:root/webrtc/
wget https://storage.googleapis.com/appengine-sdks/featured/google_appengine_1.9.40.zip
# 安裝unzip
apt-get install unzip
unzip google_appengine_1.9.40.zip
#配置環境變量:在/etc/profile文件最後增長一行:
export PATH=$PATH:/root/webrtc/google_appengine
source /etc/profile
六、安裝libevent
#當前目錄:root/webrtc/
#https://github.com/coturn/coturn/wiki/CoturnConfig
wget https://github.com/downloads/libevent/libevent/libevent-2.0.21-stable.tar.gz
tar xvf libevent-2.0.21-stable.tar.gz
cd libevent-2.0.21-stable
./configure
make
make install
七、安裝apprtc
#當前目錄:root/webrtc/
# 注意若是沒有git的話,須要apt install git安裝一下git
git clone git://github.com/webrtc/apprtc.git
#將collider的源碼軟鏈接到go的工做目錄下
ln -s /root/webrtc/apprtc/src/collider/collider $GOPATH/src
ln -s /root/webrtc/apprtc/src/collider/collidermain $GOPATH/src
ln -s /root/webrtc/apprtc/src/collider/collidertest $GOPATH/src
#編譯collidermain,須要你懂的上網
go get collidermain
go install collidermain
在執行go get collidermain
因爲衆所周知的緣由可能致使沒法下載,可能會報如下的錯誤:
#報錯: package golang.org/x/net/websocket: unrecognized import path "golang.org/x/net/websocket"
這時候咱們只要單獨使用git下載net便可:
mkdir -p $GOPATH/src/golang.org/x/
cd $GOPATH/src/golang.org/x/
git clone git://github.com/golang/net.git net
go install net
# 從新獲取一下collidermain
go get collidermain
go install collidermain
八、安裝coturn
#目錄:root/webrtc/
#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
cd turnserver-4.5.0.7
./configure
make install
配置運行服務器
一、coturn Nat穿透服務器
注意這裏須要設置一下用戶名和密碼,後面會配置apprtc的時候須要使用到。
#啓動內網ip,這個是172開頭的,在你雲服務器的後臺能夠查詢到,好比筆者的是172.16.16.4,用戶名設置爲flyer,密碼爲123456
nohup turnserver -L 172.16.16.4 -a -u flyer:123456 -v -f -r nort.gov &
# 能夠經過命令lsof -i:3478查詢下是否啓動成功,成功的話通常會輸出如下信息
#COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
#turnserve 14754 root 16u IPv4 112232 0t0 UDP instance-5i00bk4l:3478
#turnserve 14754 root 17u IPv4 112233 0t0 UDP instance-5i00bk4l:3478
#turnserve 14754 root 32u IPv4 112263 0t0 TCP instance-5i00bk4l:3478 (LISTEN)
#turnserve 14754 root 33u IPv4 112267 0t0 TCP instance-5i00bk4l:3478 (LISTEN)
二、collider 信令服務器
配置防火牆,容許訪問8089端口(tcp,用於客戶端和collider創建websocket信令通訊)
#建立自簽名的數字證書,若是沒有openssl,須要安裝
mkdir -p /cert
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="https://你服務器的公網ip:8080" &
#使用命令lsof -i:8089檢查下是否啓動成功,若是成功則會輸出如下類似的信息
#COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
#colliderm 14817 root 3u IPv6 112969 0t0 TCP *:8089 (LISTEN)
三、搭建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": "coturn Nat穿透服務器的用戶名",
"credential": "coturn Nat穿透服務器密碼"
},
{
"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版本過低
# 若是報錯咱們須要使用npm install -g n和sudo n stable更新如下node而後再繼續執行如下命令便可
npm install --no-fund
# 這一步有可能報錯,下面有解決方法
grunt build
在上面執行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, in
import requests ImportError: No module named requests Use --force to continue. Aborted due to warnings.
##### 安裝pip
cd /root/webrtc
wget https://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg --no-check-certificate
chmod +x setuptools-0.6c11-py2.7.egg
./setuptools-0.6c11-py2.7.egg
wget https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz
tar -xf pip-1.5.4.tar.gz
cd pip-1.5.4
python setup.py install
pip install requests
# 安裝完成後再執行編譯:
cd /root/webrtc/apprtc
# 從新執行下編譯
grunt build
啓動apprtc
#注意如下內網ip是172開頭的
nohup dev_appserver.py --host=服務器的內網ip /root/webrtc/apprtc/out/app_engine --skip_sdk_update_check &
到了這一步WebRTC的服務器基本就算搭建完成了,這時候在你的瀏覽器輸入http://服務器公網IP:8080/
若是能順利打開,那麼恭喜你環境算是搭建成功啦!!!
四、安裝nginx代理https
爲何須要安裝nginx,由於chrome瀏覽器不支持在非https方式下打開音/視頻設備。並且apprtc中的信令服務器(collider)也不支持非 https 服務。
可是咱們在前面配置中都是使用http的服務,沒有直接配置成https的,所以咱們須要使用nginx作一次代理,實現https的服務。固然若是在前面的配置中咱們直接使用https的服務,那麼這一步就沒有必要了,可是須要咱們有第三方的證書,而不是使用私有證書。
下面下載安裝如下nginx:
# 下載nginx
wgwt http://nginx.org/download/nginx-1.16.1.tar.gz
# 解壓
tar xvf nginx-1.16.1.tar.gz
# 安裝PCRE
apt-get install libpcre3-dev
cd nginx-1.16.1
./configure --with-http_ssl_module
make install
#默認安裝在/usr/local/nginx
#配置nginx.conf
vim /usr/local/nginx/conf/nginx.conf
修改nginx配置/usr/local/nginx/conf/nginx.conf
:
events {
worker_connections 1024;
}
http{
upstream roomserver {
server 你服務器的公網ip:8080;
}
server {
listen 80;
server_name 你服務器的公網ip;
return 301 https://$server_name$request_uri;
}
server {
root /usr/share/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 4你服務器的公網ip;
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;
}
}
}
啓動nginx:
/usr/local/nginx/sbin/nginx
這時候再次在瀏覽器輸入服務器的ip就能打開apprtc了,打開後大概如圖這樣子的:
而後點擊加入房間,容許相關權限就能經過攝像頭看到本身的畫面了...
吐槽兩句
不得不說爲了準備一個WebRTC的開發測試環境仍是有點坑的,雖說按照步驟來不難,可是須要搭建的內容實在是太多,並且極容易一步錯步步錯。
筆者也是嘗試了好幾天,查了不少的資料作了不少嘗試才搭建成功。最後仍是爲互聯網人的網絡不能互聯而WTF發泄一下...
共勉!!!
關注我,一塊兒進步,人生不止coding!!!
本文分享自微信公衆號 - 思想覺悟(ChuanFlyer)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。