webrtc实时音视频通话方案 webrtc多人视频通话
淘宝搜:【天降红包222】领超级红包,京东搜:【天降红包222】
淘宝互助,淘宝双11微信互助群关注公众号 【淘姐妹】
?问题背景:
疫情除了火了电商直播、短视频也火了视频会议,其中看zoom和声网市值就能窥探实时音视频的目前发展情况。其中视频会议相关的技术栈基本都是建立在WebRTC基础上,为了了解学习WebRTC,首先需要搭建一个能测试和抓包的环境,然后调用WebAPI写写DEMO熟悉下相应接口和抓抓包看看基本交互流程。最后再逐渐深入到协议和相关的源代码中。本文就是帮助大家一步步搭建一个DEMO的运行环境,只要严格按照教程,基本都能搭建出来,后续再讲解接口调用和WebRTC一些源码编译和内部情况。
?
相关资料和链接:
DEMO演示链接:
https://srs.stg.closeli.cn/index.html
本人DEMO源代码下载链接:
https://github.com/ty6815/【【淘密令】】.git
或者去官网下载DEMO也可以,但是估计需要做一些适配和兼容工作,本DEMO也是在这个基础上改改后实现的。
DEMO涉及的API:
https://de【【微信】】.mozilla.org/en-US/docs/Web/API/WebRTC_API
WebRTC源代码:
git clone?https://webrtc.googlesource.com/src
中英社区:
https://webrtc.org.cn/
https://webrtc.org/
?
可以关注公众号,了解更多:
准备工作:
要实现这套系统,运行环境是特别关键的,其中有三个条件是必须要满足的:云主机、2M 以上的带宽和 HTTPS 证书,这些需要你提前准备好。其中云主机尽量要能申请一个域名并且能够通过后台开放相应的端口。
云主机和带宽要求:搭建Web服务器(分发客户端的代码)、信令服务器(客户端加入房间交互SDP信息确定媒体协商和ICE中的候选者信息)以及stun/turn服务器(获取客户端的ICE信息),CPU内存一般的够用,但是带宽上下行要至少2M以上,至少要能撑起两路视频的带宽。
HTTPS证书:想在浏览器上实现1对1的视频通话,肯定需要访问主机或者手机上的音视频设备,出于安全的原因,浏览器要求我们使用 HTTPS 协议从服务器请求 Ja【【微信】】 脚本,只有通过 HTTPS 请求的脚本才能访问音视频设备。
核心步骤:
要运行这个DEMO,基本需要下面几个核心步骤:
1.?搭建nodejs环境;
2.?创建免费的https证书;
3.?安装express Web服务器和信令服务器;
4.?安装coturn服务;
5.?代码兼容和适配;
?
搭建nodejs环境:
Step1:进入nodejs官网
【【网址】】/en/download/
找到想要下载的版本链接。
Step2:进入linux云主机
二进制程序安装nodejs,安装在/user/local/nodejs下面
cd /home/dev/
【【微信】】://nodejs.org/dist/v14.15.0/node-v14.15.0-linux-x64.tar.xz
cd /usr/local
cp /home/tianye/node-v14.15.0-linux-x64【【网址】】/news/
tar -x【【微信】】.15.0-linux-x64.tar.xz
m【【微信】】.15.0-linux-x64 nodejs
Step3:添加环境变量
vim /etc/【【微信】】
里面添加:
【【微信】】=/usr/local/nodejs
export PATH=$PATH:{$NODE_HOME}/bin
或者
export PATH=$PATH:/usr/local/nodejs/bin
配置生效:
source /etc/【【微信】】
Step4:添加软连接
ln -s /usr/local/nodejs/bin/npm /usr/local/bin/
ln -s /usr/local/nodejs/bin/node /usr/local/bin/
Step5:验证结果:
由于npm安装的依赖库有些经常在国外,网络有时不通所以需要添加国内镜像:
安装cnpm工具和注册阿里巴巴镜像地址:
npm?install -g cnpm --registry【【网址】】
结果:
cnpm -v
?
创建免费的https证书:
参考文档:
https【【网址】】/qq_【【QQ微信】】/【【微信】】tails/82149807
https://www.【【微信】】.com/tugenhua0707/p/10927722.html
openssl命令行:
openssl re【【微信】】:2048 -keyout /etc/turn_ser【【微信】】.pem -out /e【【微信】】_cert.pem -days 99999 -nodes
?
?
安装express Web服务器和搭建信令服务器:
参考:
https://www.【【微信】】.com/handongyu/p/6260209.html
https【【网址】】/qq_【【QQ微信】】/【【微信】】tails/108916018
Step1.?安装express服务极其依赖:
npm init -y
npm install?log4js
npm install?socket.io
npm install express
mkdir etc
将https证书放到etc下面,并修改代码加载改文件名称和这里名称保持一致
Step2.?发布静态文件到express服务:
将css/html/js文件放到跟目录下面
代码里面也直接指定前端资源和代码的路径:
Step3.?启动信令服务:
方法1:直接启动
node server.js
缺点:需要ctrl+c停掉程序,并且命令窗口一直存在并且不能关闭;
方法2:forever启动
安装forever工具
npm install forever -g?
或者
【【微信】】
?
注:forever简单使用
Git地址:
https://github.com/foreversd/forever
参考文档:
https://www.【【微信】】.com/KDSER/p/9099454.html
启动示例:
/usr/local/nodejs/bin/fore【【微信】】.js
查看进程示例:
/usr/local/nodejs/bin/fore【【微信】】
停掉程序示例:
/usr/local/nodejs/bin/fore【【微信】】?server.js
或者
fore【【微信】】 [id]
Step4.?效果展示:
信令服务有没有搭建成功,就是用那个域名地址直接是否可以访问:
再就是连接信令服务是否成功,点击Connect Sig Server置灰,同时客户端控制台有如下输出则说明连接上信令服务器:
Step5.?注意事项:
?
1.https证书要提前准备好,可以利用openssl免费生成也可以提交csr文件到CA认证机构进行认证;
2.域名要备案,要把云主机的服务器服务器外网ip跟dns挂钩,用域名则直接可以访问还可以用ip直接访问;
3.启动服务要先去安装一系列依赖库,这个手动安装,要想用forever启动进程还需要安装该工具,如果npm不行就用cnpm安装;
?
安装coturn服务:
Step1.?安装coturn依赖库:
yum install git
yum install openssl
yum -y install openssl-devel
yum install libevent
yum install libevent2
yum install libevent-devel
Step2.?编译安装:
git clone https://github.com/coturn/coturn.git
http://www.taodudu.cc/news/configure --prefix=/usr/local/coturn
sudo make -j 4
make install
或者
yum install coturn
Step3.?配置配置文件:
安装coturn?完成后可能还不知道配置文件在哪里,需要找下
find / -name turnserver.conf
Step4.?修改配置文件:
一般配置下面几项
实际配置文件配置:
?
Step5.?开放防火墙或者端口:
添加
【【微信】】=public --add-port=3478/udp --permanent
【【微信】】=public --add-port=3478/tcp --permanent
重新载入
firewall-cmd --reload
重启防火墙?
systemctl restart firewalld
注意:特别要对3478端口即开放UDP也需要开放TCP,如果是阿里云主机需要在Web界面上配置和开放。
Step6.?启动服务:
cd /usr/local/coturn/bin
方式1:
turnser【【微信】】.115.201.109 -a -o -c /usr/local/coturn/e【【微信】】.conf
方式2:
turnser【【微信】】=tianye:123456 -【【微信】】 /usr/local/coturn/e【【微信】】.conf
Step7.?查看进程端口:
ps -ef|grep turnserver
netstat -tunlp|grep 14503
Step8.?结果验证:
测试地址:
https://webrtc.github.io/samples/src/content/peerconnection/trickle-ice/
添加turnserver的服务信息,包括域名、端口、用户名和密码
stun srs.stg.closeli.cn:3478
turn srs.stg.closeli.cn:3478
如果这里返回了rtp realy的地址IP是你turnserver服务的外网IP和端口,则说明coturn服务搭建成功,测试有效。
?
?
代码兼容和适配:
?
由于示例信令程序太老,所以本次进行升级后发现一些问题,要修改前后端代码,否则整个链路有问题。
Step1.?前端代码升级socket.io依赖库版本:
由于房间管理是通过socket.io做的,利用websocket接口进行全双工通信,服务端当时安装了3.0.1的socket.io版本,所以客户端的版本要升级,否则前端和服务器端connect时失败。
?
Step2.?前端代码main.js里面添加turn服务器信息:
P2P打洞的时候需要和前面建立的coturn服务进行通信,所以这里需要改成实际建立的coturn服务信息。
Step3.?服务器信令服务需要修改监听事件:
房间服务监听客户端链接事件,如果收到有人加入到同一个房间则同时判断该房间的其它人数,如果该房间有2个人及以上加入则会给客户端发送otherjoin事件,由于这里求解users出现问题,导致即使有两个人加入,客户端也收不到otherjoin事件进而导致不能进行p2p通信以及其他流程,所以这里采用计数法cunt为全局变量,统计该房间人数,后面再看下socket.io这块问题。
?
?
?
效果演示:
演示环境建议选择chrome浏览器和Safari浏览器测试和使用。
Step1.?两端加入房间,打开画面
电脑端先加入房间1234,其次手机(和电脑连的同一局域网)也加入该房间,最后看到双方的通信的实时音视频画面:
由于电脑和手机连的同一个局域网,这里其实没有用P2P而是HOST直连方式,所以即使你不安装coturn服务器,按道理也是可以的。
Step2.不同局域网和4G测试:
如果两端分别在两个不同局域网,比如你工作电脑和家里的电脑,或者你工作电脑和4G这个时候必须安装coturn服务器,走P2P打洞方式,如果打洞失败则需要走中继方式。目前测试下来基本都是可以的。
Step3. 电脑无摄像头测试:
本示例还多了一个桌面分享按钮,就是说你电脑端采集的视频可以不是摄像头是桌面,这样可以在无摄像头的电脑上跑通该用例,记得电脑端进入房间后,分享桌面【【淘密令】】前面打钩,再连服务器。但是该功能仅限在PC端,因为移动端还不支持该接口,无法使用。
?
?
总结:
整体来说,要顺利运行本DEMO还是需要有一些前端和音视频背景知识的,因为有很多专业词汇和代码需要浏览。入门学习者建议先搜索下这块内容。其次WebRTC是集音视频大成者,值得研究和学习,本文只是起到抛砖引玉作用,后续内容敬请关注本公众号和视频号。
?
?
往期文章回顾:
借力SRS落地实际业务的几个关键事项
视频码控:CBR、VBR和ABR
音视频常见问题分析和解决:HLS切片丢帧引起的视频卡顿问题排查
译:构建音视频直播应用需要考虑的12件事
HLS+FMP4方案对H.265+AAC支持要点
流媒体传输协议:RTMP、HLS和RTSP介绍
基于HLS-TS&RTMP-FLV的微信小程序点直播方案
一图看懂音视频核心技术栈(框架、工具和场景))
国产开源流媒体SRS4.0对视频监控GB28181的支持
从方块效应&呼吸效应看编码量化参数对流控的作用
家庭消费类摄像头选择攻略和隐私保护小建议
音视频封装小总结(PS?TS?和FLV)
SDP在RTSP、国标GB28181、WebRTC中的实践
视频监控摄像头的互联网化实践思路
在HTML5上开发音视频应用的五种思路
周末活动回顾:视频质量主观评价、实时RTC和AV1
音视频封装:MP4结构概述和分析工具
音视频解封装:MP4核心Box详解及H264&AAC打包方案
音视频基础知识-时间戳的理解
音视频封装格式:AAC音频基础和ADTS打包方案详解
从人类的第一次直播聊聊视频监控行业
音视频压缩:H264码流层次结构和NALU详解
音视频传输:RTP协议详解和H.264打包方案
音视频常见问题分析和解决:延时和抖动
个人转载内容至朋友圈和群聊天,无需特别申请版权许可。
引用转载该订阅号文章,注明文章来源即可。
记得右下角点“在看”,还可以关注该订阅号,防止遗漏推送哦
?
?
今天就说这么多,祝您工作顺利!
?
?
?
华为截屏怎么滚动截屏 华为截屏敲击截屏怎么设置
华为截屏怎么截图方法,华为截屏怎么搞,华为截屏怎么删除,华为截屏怎么隐私打码电脑截图有多种方法,以下是一些常用的方法:
1. 使用快捷键:在需要截图的屏幕上按下“Print Screen”(PrtScn)键或“Fn+Print Screen”键(如果您的电脑键盘上有Fn键),这将会把整个屏幕的截图保存在剪贴板中。
2. 使用Windows自带的截图工具:按下Windows键+Shift+S键,屏幕会变灰,此时鼠标变成十字形状。用鼠标选取需要截图的区域,截图将会被保存在剪贴板中。
3. 使用截图软件:有许多免费或付费的截图软件可以下载,如Greenshot、Snipping Tool等,在安装并打开软件后,按照软件的使用说明进行操作即可完成截图。
4. 使用浏览器插件:有些浏览器插件可以方便地进行截图,如Chrome浏览器的“Awesome Screenshot”插件,只需安装并使用插件,就可以轻松地进行截图操作。
以上是电脑截图的几种常见方法,您可以选择其中一种或多种方式进行截图。
电脑截图能够在很多情况下带来方便,例如:
1.让你更好地记录信息:如果你想要保存某个屏幕上的信息,例如一个错误提示或是一个重要的网页内容,截图功能会让你能够快速、简单地保存这些信息,而不用复制、粘贴或是手写。
2.快速共享信息:如果你需要和别人分享某个屏幕上的信息,例如一个问题或是一个有趣的图片,截图功能可以让你快速地捕捉这些信息并发送给他人。
3.帮助你更好地理解问题:截图功能可以帮助你更好地理解电脑上的问题,例如一个错误提示或是一个功能不正常的软件界面。通过截图,你可以更好地观察、分析问题,并更快地找到解决方案。
4.提高效率:如果你需要在电脑上做一些工作,例如设计或是编写代码,截图功能可以帮助你快速捕捉需要的图像或是代码,从而提高你的工作效率。
演示硬件:华为HUAWEI MateStation S 12