webrtc 快速搭建 视频通话 视频会议

  • 1
  • 2 安装node和npm
  • 3准备工作
  • 4 安装libevent
  • 5 安装coturn(turn服务器)穿透和转发服务器
    • 5.1 安装 coturn
    • 5.2 生成用户
    • 5.3 修改配置文件
    • 5.4 开启3478的tcp和udp端口
    • 5.5 开启服务
    • 5.6 测试turn服务器
  • 6 安装webrtc服务器和浏览器端
  • 7 nginx配置

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=qwertycert=/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: POODLEssl_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/*;#代理httpsupstream web {server 0.0.0.0:3000;      }#代理websocketupstream 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;}}
}

测试浏览器

#访问
https://serverIp#roomName如:
外网:https://192.168.1.123/#123
内网:http:192.168.1.123:3000#123
查看效果,其中roomName为进入的房间名,不同房间的用户无法互相通话

测试客户端
将这个项目下下来使用 android studio 编译并安装

https://github.com/ddssingsong/webrtc_android

修改WebrtcUtil.java,要去掉界面上的地址哦

// turn and stun
// 外网测试才需要
private static MyIceServer[] iceServers = {new MyIceServer("stun:stun.l.google.com:19302"),new MyIceServer("118.25.25.147:3478?transport=udp"),new MyIceServer("118.25.25.147:3478?transport=udp","ddssingsong","123456"),new MyIceServer("118.25.25.147:3478?transport=tcp","ddssingsong","123456"),};// 外网测试
private static String WSS = "wss://47.254.34.146/wss";//本地内网信令地址
private static String WSS = "ws://192.168.1.122:3000";


webrtc 快速搭建 视频通话 视频会议相关推荐

  1. webrtc 快速搭建 视频通话 视频会议 (亲测半个小时搭建成功)

    今日名言 我相信每个赤诚忠厚的孩子,都曾在心底向父母许下孝的宏愿,相信来日方长,相信水到渠成,相信自己必有功成名就衣锦还乡的那一天,可以从容尽孝. 可惜人们忘了,忘了时间的残酷,忘了人生的短暂,忘了世 ...

  2. 如何使用Intel CS for WebRTC 快速搭建实时音视频通讯系统

    如何使用Intel CS for WebRTC 快速搭建实时音视频通讯系统 Intel CS for WebRTC是一套完整的WebRTC的通讯架构套件,包括了服务端软件和客户端SDK,其中客户端SD ...

  3. Webrtc半小时搭建视频通话 视频会议

    前言 经群里很多人反映搭建服务器遇到问题,我这里将搭建过程重新梳理一遍,希望能有帮助 这里贴上项目地址 android端:https://github.com/ddssingsong/webrtc_a ...

  4. 从入门到进阶|如何基于WebRTC搭建一个视频会议

    文|网易智慧企业流媒体服务器天团 导读:疫情期间,视频会议等远程办公产品备受青睐,众多互联网玩家切入视频会议市场,加剧市场竞争.但是,产品虽多,能够带来稳定可靠体验的产品却凤毛麟角,它的难点在哪里?视 ...

  5. 基于WebRTC的音视频通话服务器搭建

    Webrtc服务器搭建后台项目地址 java项目:https://github.com/androidtencent/WebRtcJavaWeb NodeJs项目 : https://github.c ...

  6. 学信网:研究生云复试平台快速搭建上线

    通过覆盖全球的音视频通信服务,支撑学信网视频面试稳定运行和效率提升. 案例简介 研究生复试工作碰到疫情,各大院校先后发布复试流程调整通知,将复试工作从线下搬到了线上,这也是历史上的第一次.要在短期内完 ...

  7. WebRtc实现多人视频会议以及视频录制上传

    1.前言 最近公司做的一个项目需求是实现多人视频会议聊天,查阅资料,决定使用HTML5新支持的WebRtc来作为视频通讯.客户端使用支持HTML5浏览器即可,如chrome,服务器段需要提供两个主要的 ...

  8. 抓住语音社交风口,1天快速搭建语音聊天室

    语音聊天室孵化 一起KTV.众人大合唱.语音开黑.狼人杀.剧本杀.多人配音.观影.语音电台.相亲联谊社交等,一般都是在语音聊天室中进行,那么语音聊天室产品如此火热的原因有哪些呢? 一对一社交适用于朋友 ...

  9. 一文学会快速搭建Janus服务端

    1.概述 想要了解Janus,首先需要知道WebRTC以及Janus和WebRTC之间的关系,本文将会对这些内容做简单的介绍,同时也会介绍一下Janus的架构,Janus可以实现的功能,并展示如何快速 ...

  10. Android WebRTC+SRS/ZLM视频通话(5):Android使用WebRTC从SRS/ZLMediaKit拉流

    Android WebRTC+SRS/ZLM视频通话(5):Android使用WebRTC从SRS/ZLMediaKit拉流 来自奔三人员的焦虑日志 接着上一章内容,继续来记录Android是如何使用 ...

最新文章

  1. Spring.Net Aop
  2. First day in 聚美
  3. python使用tomorrow实现多线程
  4. JavaScript判断一个变量是对象还是数组
  5. zoj 3811 untrusted patrol
  6. 使用vrep给某个模型加dummy的一点小经验
  7. android libbfaac.so,Android中Json数据读取与创建
  8. vscode 离线安装python插件_vscode for Python插件下载-Visual Studio Code Python插件下载0.9.1 官方版-西西软件下载...
  9. postgresql分页用法_postgresql分页数据重复问题的深入理解
  10. MySQL之InnoDB存储引擎-架构
  11. Oracle 11G R2(11.0.2.4.0) RAC打PSU(11.2.0.4.11.2.0.4.171017)
  12. caj转word怎么进行转换
  13. win7安装镜像注入USB3.0,NVMe驱动
  14. Flink Event Time , Processing Time 和 Ingestion Time概念
  15. jfinal jboot 拦截器过滤文件上传请求 和 跨域解决方法
  16. seo优化教程-免费SEO优化详细教程
  17. oracle 空值排序,排在最前面或者最后面
  18. 中国碱性电解二氧化锰市场行业动态与投资规划分析报告2022-2028年
  19. 【ST开发板评测】Nucleo-F411RE开箱报告
  20. 排球计分系统java_排球计分系统|网世技术排球计分系统下载v1.0官方版 - 欧普软件下载...

热门文章

  1. Spark 练习之疫情分析
  2. java发展观_科学发展观的第一要义是以人为本。
  3. 征途服务器 文件夹需手,手游新征途手工架设服务端+配套双客户端+架设流程+服务器部署文档等...
  4. [NOI Online 2021 入门组] 切蛋糕
  5. [ZT]调侃、反讥与诡辩
  6. .doc文件不显示word图标的解决方法
  7. 境外诈骗,最新来自senegal的邮件诈骗
  8. 计算机服务器组装,一台家用虚拟化测试服务器组装
  9. mac的 tr命令_tr命令 - Holy_Shit - 博客园
  10. [转载] 胡锡进:5000亿买一包爆米花 我不想让我的国家这样