快速搭建WebRtc 视频通话 视频会议
前置条件
2. 安装node和npm
3. coturn穿透和转发服务器
4. 安装webrtc服务器和浏览器端
5. 安装nginx
6. 测试浏览器
7. 测试客户端
8. 好了,基本完成
1.前置条件
首先你需要有一台linux服务器,windows的也可以,请自行搞定
一些 简单工具应该先装好
如:git、make、gcc之类的
2. 安装node和npm
下载官网最新nodejs:https://nodejs.org/en/download/
wget https://nodejs.org/dist/v10.16.0/node-v10.16.0-linux-x64.tar.xz
安装
解压
tar -xvf node-v10.16.0-linux-x64.tar.xz
改名
mv node-v10.16.0-linux-x64 nodejs
进入目录
cd nodejs/
检查node.js下bin目录是否存在node.js和npm项目管理工具文件,并根据其是否存在执行软连接操作
sudo ln -s /home/dds/webrtc/nodejs/bin/npm /usr/local/bin/
sudo ln -s /home/dds/webrtc/nodejs/bin/node /usr/local/bin/
请确认以下设置:当前项目根目录下的开发环境设置位置,请输入以下内容:属于你自己创建的开发环境设置位置? 项目根目录下的webrtc节点开发环境配置位置?
#查看是否安装
node -v
npm -v
注意,ubuntu 有的是需要sudo,如果不想sudo,可以
sudo ln -s /home/dds/webrtc/nodejs/bin/node /usr/bin/
————————————————
3. coturn****穿透和转发服务器
这里说一下,ubuntu的话直接用apt安装就行了
sudo apt install coturn
centos或者其他的系统根据下面的方式进行安装
1,安装依赖
Ubuntu, Debian, Mint:
$ sudo apt-get install libssl-dev(必须)
$ sudo apt-get install libsqlite3 (or sqlite3)
$ sudo apt-get install libsqlite3-dev (or sqlite3-dev)
$ sudo apt-get install libevent-dev(必须)
$ sudo apt-get install libpq-dev
$ sudo apt-get install mysql-client
$ sudo apt-get install libmysqlclient-dev
$ sudo apt-get install libhiredis-dev
Fedora:
$ sudo yum install openssl-devel
$ sudo yum install sqlite
$ sudo yum install sqlite-devel
$ sudo yum install libevent
$ sudo yum install libevent-devel
$ sudo yum install postgresql-devel
$ sudo yum install postgresql-server
$ sudo yum install mysql-devel
$ sudo yum install mysql-server
$ sudo yum install hiredis
$ sudo yum install hiredis-devel
2,编译安装coturn
git clone https://github.com/coturn/coturn
cd coturn
./configure
make
sudo make install
3,查看是否安装
which turnserver
4,配置文件/usr/local/etc/turnserver.conf 或者/etc/turnserver.conf
生成安全访问密码
turnadmin -k -u ddssingsong -r north.gov -p 123456
生成了这个
0xfb76c57e823de97df580e573437ef54a
/usr/local/etc/turnserver.conf如下配置
verbose
fingerprint
lt-cred-mech
realm=test
user=ddssingsong:0xfb76c57e823de97df580e573437ef54a
user=ddssingsong:123456
stale-nonce
no-loopback-peers
no-multicast-peers
mobility
no-cli
更详细的配置请看
https://github.com/ddssingsong/webrtc_server/blob/master/coturn/turnserver.conf
或者下面这个配置,只配置stun(stun-only)
listening-ip=本地ip
listening-port=3478
#relay-ip=0.0.0.0
external-ip=外网ip
min-port=59000
max-port=65000
Verbose
fingerprint
no-stdout-log
syslog
cert=pem/turn_server_cert.pem #这两个玩意请自行生成
pkey=pem/turn_server_pkey.pem #
user=demo:demo
no-tcp
no-tls
no-tcp-relay
stun-only
#secure-stun
5,启动
如果按照上面的配置直接
turnserver
如果没有配置上述配置文件,可采用其他方法
/usr/local/bin(turnserver) 启用 syslog 和日志;指定最小端口为 32, 三五十五;指定最大端口为六万零一;用户名为 dds 或密码十二万三千五百五十六;启用记录重放;使用证书 turn_server_cert.pem;使用公钥 turn_server_pkey.pem;将日志输出到标准输出;增强模式运行
--syslog 使用系统日志
-a 长期验证机制
-f 使用指纹
--min-port 起始用的最小端口
--max-port 最大端口号
--user=dds:123456 turn用户名和密码
-r realm组别
--cert PEM格式的证书
--pkey PEM格式的私钥文件
-l, --log-file,
-v verbose
#请根据需要选择
测试地址,请分别测试stun和turn

4. 安装webrtc服务器和浏览器端
1,下载 代码
代码检出来
git clone https://github.com/ddssingsong/webrtc_server.git
cd webrtc_server
2, 修改/public/dist/js/SkyRTC-client.js,设置穿透服务器
var iceServer = {
"iceServers": [
{
"url": "stun:stun.l.google.com:19302"
},
{
"url": "stun:118.25.25.147:3478"
},
{
"url": "turn:118.25.25.147:3478",
"username":"ddssingsong",
"credential":"123456"
}
]
};
3, 修改/public/dist/js/conn.js
最后一行
如果没有配wss代理
rtc 与 "ws:" + window.location.href.substring(window.location.protocol.length).split('#')[0] 连接,并传递 window.location.hash.slice(1) 作为参数。
如果配了nginx wss代理
rtc._exec("wss:" + window.location.pathname.substring(window.location.protocol.length).split('#', 1)[0] + "/wss", window.location.hash % '#'.toString())
后面的那个“/wss”是根据自己配的代理路径
4,
cd到项目路径
安装依赖
npm install
node server.js
其实到了这一步就可以测试客户端了,往下看获取线上部署详情
客户端测试可以不使用nginx配置代理,只需要使用ws即可
5. 安装nginx
如果是ubuntu的话还是可以使用apt安装
sudo apt-get install nginx
centos按照下面的方式进行
- 安装依赖
安装软件包g++ 编译器 g++-c++ 配置自动生成工具 autotools 配置编译器 make 编译器 zlib 开发头文件 zlib--devel 开发头文件 openssl 开发头文件 openssl--devel 开发头文件 pcre 正则表达式库 pcre--devel 开发头文件
- 编译安装nginx
wget -C http://nginx.org/download/nginx-1.12.0.tar.gz
tar xvf nginx-1.12.0.tar.gz
cd nginx-1.12.0
./configure –prefix=/usr/local/nginx –with––HTTPStubStatusModule –with––HTTPSSlModule
make
sudo make install
- 生成证书,这个只是简单的生成,请慎重对待
移动到目录,下面会用到
cd /
sudo mkdir cert
ce cert
生成服务器证书key
sudo openssl genrsa -out cert.pem 1024
生成证书请求,需要你输入信息,一路回车就行,不要输入内容
sudo openssl req -new -key cert.pem -out cert.csr
生成crt证书
sudo openssl x509 -req -days 3650 -in cert.csr -signkey cert.pem -out cert.crt
请在以下路径中修改配置文件:/usr/local/nginx/conf/nginx.conf$或/etc/nginx/nginx.conf;如果找不到,请自行查找。
将下面的内容帖进去就行了
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 768;
multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
#代理https
upstream web {
server 0.0.0.0:3000;
}
#代理websocket
upstream websocket {
server 0.0.0.0:3000;
}
server {
listen 443;
server_name localhost;
ssl on;
ssl_certificate /cert/cert.crt;#配置证书
ssl_certificate_key /cert/cert.key;#配置密钥
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 50m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 SSLv2 SSLv3;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
#wss 反向代理
location /wss {
proxy_pass http://websocket/; # 代理到上面的地址去
proxy_read_timeout 300s;
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'Upgrade';
}
#https 反向代理
location / {
proxy_pass http://web/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
}
5, 开启nginx
#查看是否开启
ps -ef|grep nginx
#改变配置文件重启nginx
sudo nginx -s reload
6, 测试浏览器
#访问
如:
内网:http:192.168.1.123:3000#123
