WebRTC中RTP协议详解
WebRTC中RTP协议详解
WebRTC专题开嗨鸭 !!!
一、 WebRTC 线程模型
2、WebRTC网络PhysicalSocketServer之WSAEventselect模型使用
二、 WebRTC媒体协商
三、 WebRTC 音频数据采集
四、 WebRTC 音频引擎(编解码和3A算法)
五、 WebRTC 视频数据采集
六、 WebRTC 视频引擎( 编解码)
七、 WebRTC 网络传输
2、WebRTC的ICE之Dtls/SSL/TLSv1.x协议详解
八、 WebRTC服务质量(Qos)
九、 NetEQ
十、 Simulcast与SVC
前言
RTP协议 在流媒体中是传输媒体数据的载体
一、RTP/RTCP在协议栈中的位置
1、 RTP传输流程图
二、RTP Header 的结构图
1、RTP Header 协议字段解析
v : 版本
P : 填充数据 1:代表有填充数据 0: 没有补充数据
X : 是否有扩展头,1: 有扩展头 0:没有扩展头
CC : 这个源那些人产生的 csrc的个数 几个贡献者
M :代表视频帧的最后一个帧 1:是视频帧的最后一帧, 0:不是最后一帧视频帧
PT : 代表payloadType, 数据负载类型 例如: 音频:ops:101, 视频:127
Sequence Number: 数据有序
timestamp: 产生时间戳
ssrc:源(多路视频流ssrc判断)
csrc:数据有几个贡献者
2、 视频帧分包
序号1~3:为一个完整视频帧(I、P、B)
s:的意思是视频一帧分包 开始位置 e是结束一帧标志位
3、 RTP的扩展头
/* Struct for RTP header. */
// 0 1 2 3
// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// |V=2|P|X| CC |M| PT | sequence number |
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// | timestamp |
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// | synchronization source (SSRC) identifier |
// +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
// | Contributing source (CSRC) identifiers |
// | .... |
// +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
// | header eXtension profile id | length in 32bits |
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// | Extensions |
// | .... |
// +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
// | Payload |
// | .... : padding... |
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
// | padding | Padding size |
// +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
①、 扩展头Profile 分为两种类型
profile:占用两个字节
两种类型分别是下载
- profile值为0XBE、0XDE、扩展项的ID和len占一个字节
- profile值为0X10、0X0X,扩展项的ID和len占两个字节
②、扩展头length
表示后面跟着的扩展头有几个字节
扩展头长度以4字节为单位
如length为3,说明扩展头长度占12字节
1. 一个字节扩展头如图所示
2. 两个字节的扩展头例子
三、WebRTC用到的扩展头
1. WebRTC 中扩展头详细信息对应代码与声明
src/api/rtp_paramerters.h 中的RtpExtension结构
src/api/rtp_parameters.cc 中实现
src/modules/rtp_rtcp/source/rtp_header_extensions.cc 格式详细