基于webrtc多人音视频的研究(二)
来源:互联网 发布:共轭凸轮计算软件 编辑:程序博客网 时间:2024/06/15 13:55
基于webrtc多人音视频的研究
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,下载地址
- 基于webrtc多人音视频的研究(二)
- 基于webrtc多人音视频的研究【转】
- 基于webrtc多人音视频的研究(一)
- 基于WebRTC技术的多人音视频解决方案
- 基于webrtc的一对多音视频通讯
- 基于webrtc的一对多音视频通讯
- WebRtc研究二(WebRtcDemo的使用)
- webrtc 的研究(一)
- 基于webRTC的网页、android视频通信学习笔记(一)
- Android IOS WebRTC 音视频开发总结(七)-- 基于浏览器的开发
- 基于WEBRTC的免插件点到点视频分享
- 基于WEBRTC的免插件点到点视频分享
- 基于webRTC技术的 音视频,IM解决方案
- 基于webrtc的点对点多摄像头视频监控demo
- 基于WEBRTC的免插件点到点视频分享
- 基于webrtc的android和windows音视频通讯
- 基于Kurento的WebRTC移动视频群聊解决方案
- 基于Kurento的WebRTC移动视频群聊解决方案
- selenium java and python获取元素路径的几种方式和实例
- [Kafka]_1
- Android OOM之内存泄漏详解
- java中如何判断两个日期是否是同一周
- Linux 上DenyHosts阻止SSH暴力攻击
- 基于webrtc多人音视频的研究(二)
- 原生ajax实现文件上传
- linux下C语言的调试
- 第二周:19. Remove Nth Node From End of List
- cpp——类——virtual成员函数
- 字符串指针和字符串数组
- 设计模式简介
- 细思恐
- 无法加载DLL问题及解决方法