C++/Qt音视频通话开发MetaRTC源码解读,dtls交互流程,dtls抓包分析

这篇具有很好参考价值的文章主要介绍了C++/Qt音视频通话开发MetaRTC源码解读,dtls交互流程,dtls抓包分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。


本章内容解读MetaRTC开源代码,无任何二次开发,用于学习交流。
MetaRTC是国人开发的开源项目,适用各种场景音视频二次开发,可以去git阅读README,我们使用相对成熟的版本测试: Release v5.0-b4。

本章解读dtls交互流程,dtls抓包分析,dlts概念介绍。
DTLS
(Datagram Transport Layer Security)即数据包传输层安全性协议。传输层的TCP、UDP协议本身都不具备安全性。SSL/TLS协议是基于TCPsocket,在传输层和应用层之间构建了一个端到端的安全通道,保证了传输数据的加密性。但是SSL/TLS协议并不能用于UDP协议,而UDP也有安全传输的需求,于是产生了DTLS协议(DatagramTLS)。即DTLS的作用为给UDP提供端到端的安全通道,就像SSL/TLS对TCP的作用一样。并且DTLS尽可能参考了SSL/TLS协议的安全机制,在具体实现上复用了70%的TLS代码。DTLS的传输阶段分为两个:握手阶段和握手建立之后的传输应用数据阶段。
通过引入 DTLS 对 RTP 进行加密,使得媒体通信变得安全。通过 DTLS 协商出加密密钥之后,RTP 也需要升级为 SRTP,通过密钥加密后进行通信。

dtls抓包分析

dtls握手过程
C++/Qt音视频通话开发MetaRTC源码解读,dtls交互流程,dtls抓包分析

使用wireshark抓包工具,筛选关键字dtls,主叫点击推拉流按钮,音视频通话接通,之后关闭挂断通话,抓包截图如下,使用了非对称加密,和上面的流程图基本对的上。
在turn模式是通过coturn服务器中继的,抓不到dtls包,stun模式可以抓包。
C++/Qt音视频通话开发MetaRTC源码解读,dtls交互流程,dtls抓包分析
本端主叫是主动推拉流的,dtls交互过程中主叫是client(192.168.3.46),被叫是server(192.168.3.42)。
1-7条是明文通信:
1、 Client Hello
截图第一条消息,客户端首先向服务端发起握手。信息包括dtls版本号,加密方式,压缩方式,随机数A,Session ID等。
2、Server Hello
截图第二条消息,服务端响应一个 Server Hello 消息,携带协商出来的 TLS/SSL 版本号、加密套件和数据压缩算法,Session ID。
3、Certificate
截图第二条消息, 携带服务端数字证书(CA)以验证服务端身份,携带了服务端非对称加密所使用的公钥。
4、Server Key Exchange
截图第二条消息,携带额外信息来帮助客户端生成 pre-master key。
5、Certificate Request
截图第二条消息,在安全性要求高的场景,例如银行支付等,不仅需要验证服务端的身份,还需要验证客户端的身份,这时候服务端就会要求客户端提供客户端的身份证书。
6、Server Hello Done
截图第二条消息,Server Hello 结束。
7、Certificate
截图第三条消息,如果服务端要求客户端提供数字证书以验证身份,则客户端发送自己的身份证书给服务端。

8-11条是非对称加密通信过程:
由于非对称加密通信的性能较差,在实际的通信过程中其实使用的是对称加密通信,为了避免对称加密密钥被窃取,密钥在协商过程中使用非对称加密来进行加密。
8、Client Key Exchange
截图第三条消息,客户端在验证服务端的身份证书后,会取出其中的服务端公钥,产生一个随机数 C,作为 pre-master key;
在本地使用之前的随机数 A、B 和这次生成的 C 共同生成对称加密密钥 master-key;
使用服务端公钥对 pre-master key 加密后发送给服务端。
9、Certificate Verify
截图第三条消息,如果服务端要求客户端提供客户端证书,则客户端会发送 Certificate Verify,其中的内容是客户端使用自己的私钥加密的一段数据,提供给服务端用客户端的公钥来进行解密验证。之所以需要这一步是为了确保客户端发送的证书确实是它自己的证书。
10、Change Cipher Spec
截图第三条消息,提示服务端随后使用 master key 来进行对称加密通信。
11、Change Cipher Spec
截图第四条消息,提示客户端随后使用 master key 来进行对称加密通信。
12、Application Data
截图6-14条消息,加密后的应用数据。
12、Encrypted Alert
截图最后一条,当挂断电话时,客户端会向服务端发送一条Encrypted Alert,表示结束会话。

dtls流程,主叫发送Client Hello

主叫dtls大致流程:YangP2pHandleImpl::connectRtc,YangP2pRtc::connectPeer,g_yang_pc_startRtc(setRemoteDescription),yang_rtcconn_startRtc,yang_create_rtcudp。
在turn场景下,获取turn allocate ip成功后,被叫先接收到非StunMagicCookie ((uint32_t)0x2112A442),触发yang_doHandshake,开始dtls交互,主叫之后接收到消息非StunMagicCookie触发yang_doHandshake。

dtls交互使用的udp和音视频数据收发使用的udp是同一个udp,当sdp交互完成后创建udp,udp通信建立成功后,主叫收到被叫的udp消息,主叫触发dtls流程,先发送Client Hello给被叫。
C++/Qt音视频通话开发MetaRTC源码解读,dtls交互流程,dtls抓包分析
被叫也是在相同的位置回复Server Hello,其实上述流程1-11条都是由这里触发发送的,dtls握手完成后打印,之后就可以通过udp收发音视频数据,开始音视频通话。

dtls handshake is sucess

dtls流程,Application Data

每隔一段时间触发一次。
C++/Qt音视频通话开发MetaRTC源码解读,dtls交互流程,dtls抓包分析

dtls流程,Encrypted Alert

挂断程序退出,执行析构时触发,如果是SRS组建的视频会议,也是通过这一条消息通知SRS结束推流的。
C++/Qt音视频通话开发MetaRTC源码解读,dtls交互流程,dtls抓包分析文章来源地址https://www.toymoban.com/news/detail-408709.html

到了这里,关于C++/Qt音视频通话开发MetaRTC源码解读,dtls交互流程,dtls抓包分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Qt音视频开发45-音视频类结构体参数的设计

    视频监控内核组件重构和完善花了一年多时间,整个组件个人认为设计的最好的部分就是各种结构体参数的设计,而且分门别类,有枚举值,也有窗体相关的结构体参数,解码相关的结构体参数,同时将部分常用的结构体参数的获取和设置单独提供了函数,参阅海康大华等大

    2024年02月05日
    浏览(70)
  • 音视频实时通话解决方案

    想要实现音视频通话,对于大部分人可能会觉得很难,但是实际上,有些事情并没有大家想的那样困难,只要功夫深,铁杵磨成针。 机缘巧合下,在业务中,我也遇到了一个业务场景需要实现音视频通话,我们不可能自己从零开始干,我本次用到的核心是WebRTC。 WebRTC (Web R

    2024年02月12日
    浏览(46)
  • Android之 集成音视频通话

    一,背景 1.1 最近接收一个即时通讯二开项目,即时通讯部分用的XMPP协议,音视频则是集成的国外的开源免费库jitsi-meet-sdk-2.4.0-4.aar,是基于WebRTC的开源框架。但客户想要微信那种页面的排版,后来经研究jitsi是不能修改UI的,UI部分是用混合框架ReactNative写的,这样难度就大了

    2024年02月12日
    浏览(59)
  • 技术分享| 小程序实现音视频通话

    上一期我们把前期准备工作做完了,这一期就带大家实现音视频通话! 为了更好的区分功能,我分成了六个 js 文件 config.js 音视频与呼叫邀请配置 store.js 实现音视频通话的变量 rtc.js 音视频逻辑封装 live-code.js 微信推拉流状态码 rtm.js 呼叫邀请相关逻辑封装 util.js 其他方法

    2024年02月02日
    浏览(55)
  • WebRTC音视频通话-RTC直播本地视频及相册视频文件

    WebRTC音视频通话-RTC直播本地视频及相册视频文件 WebRTC音视频通话-RTC直播本地视频文件效果图如下 WebRTC音视频通话-RTC直播本地视频文件时候,用到了AVPlayer、CADisplayLink。 AVPlayer是什么? AVPlayer是基于AVFoundation框架的一个类,很接近底层,灵活性强,可以自定义视频播放样式

    2024年02月13日
    浏览(48)
  • Qt/C++音视频开发46-音视频同步保存到MP4

    用ffmpeg单独做视频保存不难,单独做音频保存也不难,难的是音视频同步保存到MP4中,重点是音视频要同步,其实这也不难,只要播放那边音视频同步后的数据,写入到文件即可。最难的是在播放过程中不断随机的切换播放进度,而且还会暂停播放、暂停录制的情况出现,这

    2024年02月17日
    浏览(68)
  • WebRTC音视频通话-WebRTC视频自定义RTCVideoCapturer相机

    WebRTC音视频通话-WebRTC视频自定义RTCVideoCapturer相机 在之前已经实现了WebRTC调用ossrs服务,实现直播视频通话功能。但是在使用过程中,RTCCameraVideoCapturer类提供的方法不能修改及调节相机的灯光等设置,那就需要自定义RTCVideoCapturer自行采集画面了。 iOS端WebRTC调用ossrs相关,实现

    2024年02月12日
    浏览(59)
  • Web网页音视频通话之基于Sipjs

    简述 本文是以 FreeSwitch 作为信令服务器,通过sipjs(基于webRtc) 进行媒体协商,网络协商后,进行P2P媒体传输。 参考知识: sip.js https://sipjs.com/ webRtc开发手册 https://developer.mozilla.org/zh-CN/docs/Web/API/WebRTC_API 效果图 : HTML javaScript operation.js 拨打 接听 通话中

    2023年04月17日
    浏览(48)
  • web 前端实现音视频通话 - liveKit 框架

    go1.18以上 liveKit-server.exe liveKit官方文档链接 科学上网(github) 在liveKit 中有两个概念,分别是:room 房间 和 user 用户 房间很好理解,类似一个腾讯会议中的 一个会议 用户指的是 加入房间的所有人。 每个用户的权限是相同的 想要实现主持人功能,可以通过web服务器来对liveKi

    2024年04月14日
    浏览(45)
  • WebRTC音视频通话-实现GPUImage视频美颜滤镜效果iOS

    WebRTC音视频通话-实现GPUImage视频美颜滤镜效果 在WebRTC音视频通话的GPUImage美颜效果图如下 可以看下 之前搭建ossrs服务,可以查看:https://blog.csdn.net/gloryFlow/article/details/132257196 之前实现iOS端调用ossrs音视频通话,可以查看:https://blog.csdn.net/gloryFlow/article/details/132262724 之前WebR

    2024年02月12日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包