目录

zzwebrtc-sfu实现原理

【zz】webrtc sfu实现原理

大佬的开源代码

  • 编译后实现了sfu 和多人通话的客户端
  • 看得出来是最初的版本,但是帮助很大
  • 下面这篇文章就是大神对webrtc sfu原理的讲解

添加录屏分享和摄像头会话

  • 基于webrtc录屏
  • https://i-blog.csdnimg.cn/blog_migrate/4d4f63f146edf8f4b12603c6e97f88b2.png
  • 多人会话 https://i-blog.csdnimg.cn/blog_migrate/e0c68b0ebbaebc9981506e1f91466047.png

作者说明

  • https://i-blog.csdnimg.cn/blog_migrate/41022e61d1a5c570d69b991f268cbf79.png
																				
						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