webrtc使用的协议栈如下图:左侧为传统的浏览器HTTP相关协议, 右侧为webrtc所使用的协议栈。
- 最上面一层为API层
- 对于http来说 他的下层使用的TLS协议 如果是https则有这一项,用于加密
- SRTP可以使用底层的DTLS, 也可以不用.DTLS时参照TLS实现的一套协议
- Webrtc中的ICE,STUN,TURN 用于链路检测
- HTTP底层使用的流式的传输协议 – TCP
- Webrtc底层使用数据报的形式传输数据 – UDP
- 最底层都是使用的IP协议
webrtc中需要重点了解的协议
- RTP / SRTP : 未加密数据 / 加密数据, 消息格式都一样
- RTCP / SRTCP : 同上, 传输的内容是传输质量的报告, 例如 : 抖动、丢包…
- DTLS : 加密之前都要通过DTLS进行证书的检测和加密算法的协商.
RTP协议结构
- V : 2位, RTP版本号
- P : 1位, 填充标识, 填充保持32位对齐,填充字节的个数(包含自己)
- X : 1位, 扩展标识, 即RTP可以增加用户自定义的扩展头
- CC : 4位, CSRC(共享者)个数
- M : 1位, 标识帧边界, 一个包1500字节包含包头, 一帧数据需要多个包承载,该帧数据的最后一个包M位置1 表示数据边界(还可以根据不同的编解码的配置表不同的含义去设定)
- PT : 7位, payload type, 用于区分不同的编解码器
- seq number : 16位, 标识包的顺序, 正常是连续增长的
- timestamp : 32位, 时间戳, 组包时 同一帧数据的包时间戳是相同的
- SSRC : 32位, 每个视频源/音频源使用一个SSRC
- CSRC : 32位, 多路混音时使用, 每一路的SSRC都会放在CSRC中
RTCP协议
- RTCP的端口为RTP端口+1, 一般RTCP会与RTP复用同一个端口
- 一个RTCP包中一般包含多个报告
C++音视频开发学习资料:点击领取→音视频开发(资料文档+视频教程+面试题)(FFmpeg+WebRTC+RTMP+RTSP+HLS+RTP)
RTCP payload type
- 200 : 发送报告, 相比接收报告, 增加了发送者的描述信息
- 201 : 接收报告
- 202 : 源的描述, 其中有一个重要内容, 即 源的名字cname, 人类可以识别的属性, 一个源可以对应多个ssrc, 但是在某个时刻只能对应一个ssrc, 当ssrc与别的源发生冲突时会发生变化, 但是cname不变
- 203 : 停止共享源
- 204 : 自定义类型 – subtype
RTCP Header
Sender Info 说明
Receive Report block
RTCP SR/RR发送时机
- 接收端只发送RR
- 既是发送端又是接收端时, 在上一次报告之后有发送过数据时, 则发送SR.
注 : webrtc基本不使用SDES消息, 因为在SDP中已经有了cname的描述, 除非发生了ssrc的变化才会使用SDES消息.
SDES item
注 : 协议中…代表了一系列要关闭的流.
DTLS
大致流程:
- hello
- 交换证书 、加密算法和key(公钥)
- 传输数据
- 私钥解密
- webrtc在使用srtp的时候 要进行证书的交换, 之后是密钥的交换, 之后才是数据的加密解密.
- 双发交换证书后如何证明证书是正确的?
- DTLS之前进行的媒体协商 其中的fingerprint就是证书唯一标识, 协商时互相交换了fingerprint, 在后面使用fingerprint对证书进行验证.
SRTP
DTLS 与SRTP的关系
- DTLS用于交换公钥
- SRTP用于对数据加密
版权声明:本文内容转自互联网,本文观点仅代表作者本人。本站仅提供信息存储空间服务,所有权归原作者所有。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至1393616908@qq.com 举报,一经查实,本站将立刻删除。