zzwebrtc-sfu实现原理
【zz】webrtc sfu实现原理
大佬的开源代码
- 编译后实现了sfu 和多人通话的客户端
- 看得出来是最初的版本,但是帮助很大
- 下面这篇文章就是大神对webrtc sfu原理的讲解
添加录屏分享和摄像头会话
- 基于webrtc录屏
- 多人会话
作者说明
High-performance WebRTC SFU
基于WebRTC的SFU多人音视频通话(服务端+客户端)
--------------------------------------------------------------------------------
SFU(Selective Forwarding Unit),如果不太了解自行谷歌。
SFU服务器起到了router的作用,已占用较小的cpu和内存实现更为灵活的多方通话,这个特
性有别于MCU。
本系统包含基于WebRTC开发的SFU服务器,以及windows端基于webrtc实现的客户端;
使用方法
--------------------------------------------------------------------------------
1、启动SFU服务器(Server.exe),默认端口是6666。不建议修改端口,客户端不支持设置端口。
记住SFU服务器的IP地址,如:192.168.1.101。
2、分别在不同的机器上启动客户端Client.exe。然后点击加入频道,输入服务器IP地址,以及
房间号(房间号可以自己随意填写),房间号相同的人会进入相同的房间;同理,房间号不
同的人会进入不同的房间。
特性
--------------------------------------------------------------------------------
1、多个会议室、多人参与。
2、用到的协议ICE / DTLS / RTP / RTCP等协议。
3、支持IPv6。
4、高效率 (使用c++编码,考虑到内存和性能)。
5、支持录制,或者加载媒体文件分享给伙伴(未完成)。
注意事项
--------------------------------------------------------------------------------
1、本系统目前只能在局域网内测试,暂未增加设置STUN和TURN服务器的选项。
2、SFU本身跨平台,跨系统。编译Windows版本仅为测试方便。
3、客户端目前仅有Windows端,陆续会有Android、Web、IOS等平台客户端发布。
4、本系统上属于开发测试阶段,存在bug在所难免。毕竟作者精力有限。
作者
--------------------------------------------------------------------------------
blog: http://blog.csdn.net/gupar
email: gupar@qq.com
QQ: 345252622
Address: Beijing, China
DateTime: 2017-2-25
基于webrtc多人音视频的研究(二)
原创置顶 敬我岁月无波澜 最后发布于2017-02-28 17:03:09 阅读数 5069 收藏
展开
基于webrtc多人音视频的研究
之实践篇–SFU服务器
前言
研究webRTC断断续续的也有几个年头了,起初的兴趣来自当时上学时候在开发IM(即时通讯)缺少较好的音视频功能,开始自基于directshow自行开发的视频传输,效果差强人意,更不用说应用于生产环境了。经过百般寻找,这才了解到webRTC,遂开始研究webRTC。
13年的时候貌似还没被墙,webRTC完整下载也就300m。当时实现了基于peerconnection的P2P的音视频,后来撂下数年后在生产环境中需要跨平台的音视频传输解决方案,所以才重新拾起它。此时已是15年,再想编译其已经是无比艰难,有个好用的VPN是最基础的工具,尝试了数月后终于整出完整的VS2013工程(非ninja),整个工程大约9g了,当时都是很惊叹于webRTC的伟大(臃肿)。
物尽其用
webRTC,首先以web开头,显然是用于web端咯。这么好的东西要是只用于web端岂不是很可惜?它当然支持跨平!
我们来聊聊RTC都能干点啥:
首先就是这种社交软件、即时通讯的音视频聊天;
其次就是ipcamera等物联网设备直接可以与用户的终端通讯;
再次就是群组音视频聊天、视频会议;
最后还有直播、医疗等需要实时交互的领域。
我能想到的只有这些了,但是rtc真的很强大,我还没有真正完全的掌握它,一直处于刚刚入门级别。听说新版本的已经支持屏幕分享了,又一大喜事。这写无不促使我去不断地研究这神奇的东西。
理论到实践
好多新人还卡在怎么实现跨平台的P2P音视频通讯,而且这个过程很煎熬。具体技术实现我已经在前几篇文章中提,在此不再赘述。等真正进来后发现其实还是很简单滴。
往下看之前首先确定你已经完全掌握peerconnection的使用,甚至是实现原理,要不然请绕道而行。
华丽的分割线
peerconnection是WebRTC音视频传输api中最基础的一个,它是P2P传输音视频流、数据流的载体。我们都知道不管是Offer端还是Answer端都需要创建一个peerconnection,然后交换sdp和candidate就能完成音视频会话。
可是WebRTC并不提供服务器、mixer、router等功能,要实现SFU服务器就得自己去实现这类的功能,我们简单的聊一下实现逻辑:
1、在服务端模拟实现peerconnection,当然你也可以用webRTC自带的(如果你不怕太臃肿的话)。peerconnection基于ICE协议传输数据,这里我选择了libnice。从sdp里面提取出username、password以及candidate后赋予libnice,
这样基本上就可以打通双方的信道开始通讯了。收到数据后,并不是裸视频流!首先通过DTLS协议握手;确认安全后,拿到srtpRTP、srtpRTCP的user和pwd信息。这里提到了dtls、srtp、rtp、rtcp这四个协议,如果不懂还是先研究下。DTLS握手成功以后,ICE收到的数据就会传递给
srtp进行解密,解密后的数据为RTP或RTCP数据包,其中RTP承载的音视频数据流,RTCP承载的是音视频传输控制。
相反,我们要发送数据就要将上面的过程逆过来,先DTLS握手,将合成的RTP、RTCP数据包丢给srtp,加密后通过ICE发出去。
2、有了第1步的模拟操作后,我们就可以接收和发送音视频数据流了,自然也能录制、mixer等操作了。那我们这一步就是实现一对多的传输,peerconnection Sa负责接受客户端Ca的数据,peerconnection Sb、Sc负责向客户端Ca、Cc发送数据,那么只要将Sa收到的数据通过Sb、Sc发出去就能实现Ca向Cb、Cc发送音视频数据了。当然这个过程很复杂。
3、有了这一对多的传输过程,那么我们复制多次,就实现了多对多的过程。
服务器在这里承担了router的功能,将每一方发过来的音视频流分发给其他客户端。这样就达到了多方通话的能力。
到这里基本的思路已经讲完了,表达能力有限请多谅解。我献上我编写的SFU和客户端demo,下载地址
链接: 密码: xb6g
源码已经开源:https://github.com/harvestsure
运行效果如图:
另外补充一句:SFU服务端和客户端都没有平台的限制,不局限于windows平台。本人精力和能力有限,只能先实现这么多,来日方长我会慢慢实现各个平台的功能。
感谢阅读!
声明:原csdn下载url本来想赚个1积分的,谁知系统不断修改2分、4分、5分,最后被网友喷了。见谅,上面已将url改为百度网盘链接。
————————————————
版权声明:本文为CSDN博主「敬我岁月无波澜」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/gupar/article/details/58598963