前言
在前面的WebRTC介紹中我們已經(jīng)介紹了WebRTC的編譯以及成功地把WebRTC在Android Studio中運(yùn)行了起來槽奕,詳情請猛擊<WebRTC之Android編譯>
《WebRTC導(dǎo)入Android Studio》
在后面的學(xué)習(xí)過程中,我們將進(jìn)一步使用WebRTC實(shí)現(xiàn)Android端的實(shí)時通信對話所森。為了方便后續(xù)的開發(fā)和測試夯接,今天我們來搭建WebRTC的服務(wù)器環(huán)境盔几。
安裝環(huán)境
筆者使用的云服務(wù)器是Ubuntu 16.04。
注意盡量使用與筆者相同版本的系統(tǒng)上鞠,不然可能因?yàn)榘惭b的各種環(huán)境版本不同而導(dǎo)致搭建失敗
需要在云服務(wù)器后臺開放(出入規(guī)則)端口: 3478芍阎、8080、8089轮听、80蕊程、443
本服務(wù)器的搭建教程主要來源于WebRTC的開源項(xiàng)目apprtc:https://github.com/webrtc/apprtc
1驼唱、安裝JDK
#如果是全新的系統(tǒng)則需要更新一下apt
apt-get update
apt-get upgrade
# 安裝JDK8
apt-get install openjdk-8-jdk
# 檢測下java是否安裝成功玫恳,如果成功輸出版本號則安裝成功
java -version
2、安裝node.js
apt install nodejs-legacy
# 查看一下版本 v4.2.6
node --version
apt-get install npm
# 查看一下版本 3.5.2
npm --version
# 安裝gnurt掀序,盡量帶上版本號不恭,不然可能報(bào)node版本太低的錯
npm -g install grunt-cli@1.3.2
# 查看下版本 grunt-cli v1.3.2
grunt --version
3财饥、安裝Python和Python-webtest (python2.7)
apt-get install python
apt-get install python-webtest
python -V
#Python 2.7.12
4钥星、安裝go
apt install golang-go
# 查看版本 go version go1.6.2 linux/amd64
go version
#創(chuàng)建go工作目錄
mkdir -p /root/webrtc/goWorkspace/src
#配置環(huán)境變量:在/etc/profile文件最后增加一行:
export GOPATH=/root/webrtc/goWorkspace
# 刷新一下環(huán)境變量
source /etc/profile
在使用vi命令行的時候可能會遇到方向鍵亂位的問題谦炒,由于ubuntu 預(yù)安裝的是tiny版本,所以會導(dǎo)致我們在使用時候產(chǎn)生上述不便缕探,但是我們安裝vim的full版本后撕蔼,鍵盤所在鍵在vi下就很正常了。
解決方法:卸載tiny 版本sudo apt-get remove vim-common
琳骡,安裝full 版本sudo apt-get install vim
5讼溺、安裝google_appengine
#當(dāng)前目錄: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
#配置環(huán)境變量:在/etc/profile文件最后增加一行:
export PATH=$PATH:/root/webrtc/google_appengine
source /etc/profile
6怒坯、安裝libevent
#當(dāng)前目錄: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
7剔猿、安裝apprtc
#當(dāng)前目錄:root/webrtc/
# 注意如果沒有g(shù)it的話归敬,需要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,需要你懂的上網(wǎng)
go get collidermain
go install collidermain
在執(zhí)行go get collidermain
由于眾所周知的原因可能導(dǎo)致無法下載椅亚,可能會報(bào)以下的錯誤:
#報(bào)錯: package golang.org/x/net/websocket: unrecognized import path "golang.org/x/net/websocket"
這時候我們只要單獨(dú)使用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
8呀舔、安裝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
配置運(yùn)行服務(wù)器
1媚赖、coturn Nat穿透服務(wù)器
注意這里需要設(shè)置一下用戶名和密碼珠插,后面會配置apprtc的時候需要使用到丧失。
#啟動內(nèi)網(wǎng)ip惜互,這個是172開頭的训堆,在你云服務(wù)器的后臺可以查詢到坑鱼,比如筆者的是172.16.16.4絮缅,用戶名設(shè)置為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)
2缠局、collider 信令服務(wù)器
配置防火墻,允許訪問8089端口(tcp读处,用于客戶端和collider建立websocket信令通信)
#創(chuàng)建自簽名的數(shù)字證書罚舱,如果沒有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://你服務(wù)器的公網(wǎng)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)
3燥滑、搭建apprtc房間服務(wù)器
主要是修改配置文件/root/webrtc/apprtc/src/app_engine/constants.py
中的相關(guān)參數(shù)即可:
注意這里就需要使用到前面配置coturn Nat穿透服務(wù)器時鎖設(shè)置的用戶名和密碼
首先修改穿透服務(wù)器配置:
修改前
# 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:你服務(wù)器的公網(wǎng)ip:3478?transport=udp",
"turn:你服務(wù)器的公網(wǎng)ip:3478?transport=tcp"
],
"username": "coturn Nat穿透服務(wù)器的用戶名",
"credential": "coturn Nat穿透服務(wù)器密碼"
},
{
"urls": [
"stun:你服務(wù)器的公網(wǎng)ip:3478"
]
}
]
然后修改ICE配置:
#未修改前
ICE_SERVER_BASE_URL = 'https://appr.tc'
#修改后
ICE_SERVER_BASE_URL = 'https://你服務(wù)器的公網(wǎng)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 = '你服務(wù)器的公網(wǎng)ip:8089'
WSS_INSTANCE_NAME_KEY = 'vm_name'
WSS_INSTANCE_ZONE_KEY = 'zone'
WSS_INSTANCES = [{
WSS_INSTANCE_HOST_KEY: '你服務(wù)器的公網(wǎng)ip:8089',
WSS_INSTANCE_NAME_KEY: 'wsserver-std',
WSS_INSTANCE_ZONE_KEY: 'us-central1-a'
}]
最后修改完成保存即可铭拧。
編譯下apprtc
#編譯
cd /root/webrtc/apprtc
# 以下這一步可能會報(bào)錯赃蛛,提示node版本太低
# 如果報(bào)錯我們需要使用npm install -g n和sudo n stable更新以下node然后再繼續(xù)執(zhí)行以下命令即可
npm install --no-fund
# 這一步有可能報(bào)錯,下面有解決方法
grunt build
在上面執(zhí)行grunt build
的時候有可能會報(bào)錯提示requests模塊不存在搀菩,我們使用pip安裝一下即可呕臂,
報(bào)錯信息:
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 <module>
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
# 安裝完成后再執(zhí)行編譯:
cd /root/webrtc/apprtc
# 重新執(zhí)行下編譯
grunt build
啟動apprtc
#注意以下內(nèi)網(wǎng)ip是172開頭的
nohup dev_appserver.py --host=服務(wù)器的內(nèi)網(wǎng)ip /root/webrtc/apprtc/out/app_engine --skip_sdk_update_check &
到了這一步WebRTC的服務(wù)器基本就算搭建完成了,這時候在你的瀏覽器輸入http://服務(wù)器公網(wǎng)IP:8080/
如果能順利打開肪跋,那么恭喜你環(huán)境算是搭建成功啦!!!
4歧蒋、安裝nginx代理https
為什么需要安裝nginx,因?yàn)閏hrome瀏覽器不支持在非https方式下打開音/視頻設(shè)備州既。
而且apprtc中的信令服務(wù)器(collider)也不支持非 https 服務(wù)。
但是我們在前面配置中都是使用http的服務(wù)吴叶,沒有直接配置成https的阐虚,因此我們需要使用nginx做一次代理,實(shí)現(xiàn)https的服務(wù)蚌卤。
當(dāng)然如果在前面的配置中我們直接使用https的服務(wù)实束,那么這一步就沒有必要了奥秆,但是需要我們有第三方的證書,而不是使用私有證書咸灿。
下面下載安裝以下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
#默認(rèn)安裝在/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 你服務(wù)器的公網(wǎng)ip:8080;
}
server {
listen 80;
server_name 你服務(wù)器的公網(wǎng)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你服務(wù)器的公網(wǎng)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
這時候再次在瀏覽器輸入服務(wù)器的ip就能打開apprtc了构订,打開后大概如圖這樣子的:
然后點(diǎn)擊加入房間,允許相關(guān)權(quán)限就能通過攝像頭看到自己的畫面了...
吐槽兩句
不得不說為了準(zhǔn)備一個WebRTC的開發(fā)測試環(huán)境還是有點(diǎn)坑的避矢,雖然說按照步驟來不難鲫咽,但是需要搭建的內(nèi)容實(shí)在是太多,而且極容易一步錯步步錯谷异。
筆者也是嘗試了好幾天分尸,查了很多的資料做了很多嘗試才搭建成功。最后還是為互聯(lián)網(wǎng)人的網(wǎng)絡(luò)不能互聯(lián)而WTF發(fā)泄一下...
共勉!!!
關(guān)注我歹嘹,一起進(jìn)步箩绍,人生不止coding!3呱稀材蛛!