WebRTC之服务器搭建

前言

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

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

安装环境

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

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

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

本服务器的搭建教程主要来源于WebRTC的开源项目apprtc:github.com/webrtc/appr...

1、安装JDK

复制代码
#如果是全新的系统则需要更新一下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,尽量带上版本号,不然可能报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 

#创建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

5、安装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

6、安装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

7、安装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

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

【免费分享】音视频学习资料包、大厂面试题、技术视频和学习路线图,资料包括(C/C++,Linux,FFmpeg webRTC rtmp hls rtsp ffplay srs 等等)有需要的可以点击788280672加群免费领取~

配置运行服务器

1、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)

2、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)

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": "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/如果能顺利打开,那么恭喜你环境算是搭建成功啦!!!

4、安装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发泄一下...

共勉!!!

作者:思想觉悟

原文链接 WebRTC之服务器搭建 - 掘金

相关推荐
qq_4523962310 小时前
第十三篇:《Docker Swarm 集群基础》
运维·docker·容器
TYKJ02310 小时前
租GPU服务器前必须确认的5个隐藏成本
服务器·后端·ai编程
lld95102711 小时前
(二)从验证到执行:策略实时运行全链路
linux·服务器·数据库
biter down11 小时前
6:参数化
运维·服务器
海域云-罗鹏11 小时前
企业服务器遭到网络攻击该如何解决?应急处理与长效防护方案
运维·服务器·安全
阿洛学长11 小时前
Kali Linux 虚拟机安装(VMware Workstation 17)
java·linux·服务器
Fisher3Star11 小时前
mediasoup WebRtcTransport核心机制解析
webrtc
YOU OU12 小时前
Linux基本使用和程序部署
linux·运维·服务器
AI行业学习12 小时前
PuTTY 工具下载部署、基础配置及 SSH 远程服务器连接完整操作指南Windows 平台 【2026.6.1】
运维·windows·ssh
jiayong2312 小时前
CI/CD深度解析01-核心概念与原理
运维·git·ci/cd