当前位置:网站首页>webrtc 快速搭建 视频通话 视频会议
webrtc 快速搭建 视频通话 视频会议
2022-07-04 05:36:00 【qq_37705525】
webrtc 快速搭建 视频通话 视频会议
1
Android:https://github.com/ddssingsong/webrtc_android
Node服务器:https://github.com/ddssingsong/webrtc_server_node
Java服务器:https://github.com/ddssingsong/webrtc_server_java/tree/nodejs_copy
java版需要看清楚分支是:nodejs_copy
2 安装node和npm
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 -C /usr/local
# 改名
mv node-v10.16.0-linux-x64 nodejs
# 进入目录
cd nodejs/
# 确认一下nodejs下bin目录是否有node和npm文件,如果有就可以执行软连接
sudo ln -s /usr/local/nodejs/bin/npm /usr/local/bin/
sudo ln -s /usr/local/nodejs/bin/node /usr/local/bin/
node -v
npm -v
3准备工作
yum -y install openssl-devel
openssl req -x509 -newkey rsa:2048 -keyout /etc/turn_server_pkey.pem -out /etc/turn_server_cert.pem -days 99999 -nodes
生成了key,并保存再 /etc/turn_server_pkey.pem;
生成了cert,并保存再 /etc/turn_server_cert.pem;
有效期99999天。
如果报错: openssl error while loading shared libraries: libssl.so.1.1
ln -s /usr/local/lib64/libssl.so.1.1 /usr/lib64/libssl.so.1.1
ln -s /usr/local/lib64/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
4 安装libevent
这是一个c的扩展库
Libevent 是一个用C语言编写的、轻量级的开源高性能事件通知库,主要有以下几个亮点:事件驱动( event-driven),高性能;轻量级,专注于网络,不如 ACE 那么臃肿庞大;源代码相当精炼、易读;跨平台,支持 Windows、 Linux、 *BSD 和 Mac Os;支持多种 I/O 多路复用技术, epoll、 poll、 dev/poll、 select 和 kqueue 等;支持 I/O,定时器和信号等事件;注册事件优先级。Libevent 已经被广泛的应用,作为底层的网络库;比如 memcached、 Vomit、 Nylon、 Netchat等
wget --no-check-certificate https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz
tar -zxvf libevent-2.1.12-stable.tar.gz
cd libevent-2.1.12-stable/
./configure
make
make install
ls -al /usr/local/lib | grep libevent
5 安装coturn(turn服务器)穿透和转发服务器
5.1 安装 coturn
ubuntu安装
sudo apt install coturn
centos安装
wget --no-check-certificate https://github.com/coturn/coturn/archive/4.5.1.1.tar.gz
tar -zxvf 4.5.1.1.tar.gz
cd coturn-4.5.1.1
./configure
make
make install
5.2 生成用户
turnadmin -a -u chr -p 11111 -r xiaosi.com
上面的命令,将创建用户chr,密码为11111 ,同时指定realm为xiaosi.com,大家根据实际情况修改(包括那个xiaosi.com都是随便写)
5.3 修改配置文件
cd /usr/local/etc ##去到配置文件目录
cp turnserver.conf.default turnserver.conf
vim turnserver.conf
里面都是注释,直接再最下面插入
#与前ifconfig查到的网卡名称一致
relay-device=eth0
#内网IP
listening-ip=10.0.8.3
#公网IP
external-ip=119.91.104.48
#用户名密码,创建IceServer时用
user=chr:11111
#一般与turnadmin创建用户时指定的realm一致
realm=xiaosi.com
#端口号
listening-port=3478
#不开启会报CONFIG ERROR: Empty cli-password, and so telnet cli interface is disabled! Please set a non empty cli-password!错误
cli-password=qwerty
cert=/etc/turn_server_cert.pem
pkey=/etc/turn_server_pkey.pem
5.4 开启3478的tcp和udp端口
firewall-cmd --zone=public --add-port=3478/udp --permanent
firewall-cmd --zone=public --add-port=3478/tcp --permanent
firewall-cmd --reload
查看端口是否开放
firewall-cmd --zone=public --query-port=3478/tcp
firewall-cmd --zone=public --query-port=3478/udp
5.5 开启服务
需要注意的是,-r参数后面是上一步的-r的值
turnserver -a -f -r xiaosi.com
然后ctrl+C退出,使用 -o 参数后台启动
turnserver -a -o -f -r xiaosi.com
5.6 测试turn服务器
webrtc-samples官网提供了一个测试用的地址
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
进去之后是这个样子
添加turn服务器
同理,添加两个,一个stun,一个turn,
测试
6 安装webrtc服务器和浏览器端
git clone https://github.com/ddssingsong/webrtc_server_node.git
cd webrtc_server
public/dist/js/SkyRTC-client.js,设置穿透服务器
vim public/dist/js/SkyRTC-client.js
vim public/dist/js/conn.js
最后一行
如果没有配wss代理
rtc.connect(“ws:” + window.location.href.substring(window.location.protocol.length).split(‘#’)[0], window.location.hash.slice(1));
如果配了nginx wss代理
rtc.connect(“wss:” + window.location.href.substring(window.location.protocol.length).split(‘#’)[0]+“/wss”, window.location.hash.slice(1));
后面的那个“/wss”是根据自己配的代理路径
7 nginx配置
mkdir /cert
openssl genrsa -out cert.pem 1024
openssl req -new -key cert.pem -out cert.csr
openssl x509 -req -days 3650 -in cert.csr -signkey cert.pem -out cert.crt
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;
}
}
}
边栏推荐
- 检漏继电器JY82-2P
- LM small programmable controller software (based on CoDeSys) note XXI: error 3703
- Arc135 C (the proof is not very clear)
- 冲击继电器JC-7/11/DC110V
- Redis realizes ranking function
- 云原生架构实战案例及优化解决方案
- Take you to quickly learn how to use qsort and simulate qsort
- Letter meaning and parameter abbreviation of optical module Daquan
- The end of the Internet is rural revitalization
- left_and_right_net正常版本
猜你喜欢
BUU-Crypto-[GXYCTF2019]CheckIn
C语言简易学生管理系统(含源码)
Gridview出现滚动条,组件冲突,如何解决
Arc135 C (the proof is not very clear)
JS flattened array of number shape structure
JS arguments parameter usage and explanation
Upper computer software development - log information is stored in the database based on log4net
724. 寻找数组的中心下标
复合非线性反馈控制(二)
(4) Canal multi instance use
随机推荐
力扣(LeetCode)184. 部门工资最高的员工(2022.07.03)
Upper computer software development - log information is stored in the database based on log4net
left_ and_ right_ Net interpretable design
BUU-Pwn-test_ your_ nc
接地继电器DD-1/60
Evolution of system architecture: differences and connections between SOA and microservice architecture
BUU-Crypto-Cipher
Notepad++ -- display related configurations
How to use postman to realize simple interface Association [add, delete, modify and query]
LC周赛300
Actual cases and optimization solutions of cloud native architecture
Programmers don't talk about morality, and use multithreading for Heisi's girlfriend
Google Chrome browser will support the function of selecting text translation
如何判断数组中是否含有某个元素
JS string splicing
Recommended system 1 --- framework
How to configure static IP for Kali virtual machine
19.Frambuffer应用编程
体验碎周报第 102 期(2022.7.4)
How to implement lazy loading in El select (with search function)