RTP介绍

一、简介

Real-time Transport Protocol(实时传输协议)  具体参考rfc3350介绍 

可负载H264、H265、G711A、AAC、PS、私有流等各种数据。

二、格式

RTP 固定头部格式如下

  RTP介绍_第1张图片

 

version   (V):  2bits RTP协议版本号 目前协议版本为2

padding (P):  1bit  填充位  设置成1,表示尾部有填充数据。最后一个字节表示 填充数据长度

extension (X): 1bit  扩展位,设置成1,表示固定头部后面有扩展头

CSRC count (CC): 4bits CSRC个数, 每个CSRC占4字节

marker (M): 1bit  不同的有效载荷有不同的含义,对于视频,标记一帧的结束;对于音频,标记会话的开始。

payload type (PT): 7bits 负载类型  可参考rfc35511 目前视频主要用96后表示

sequence number: 16bits 包序号 用于标识发送者所发送的RTP报文的序列号,每发送一个报文,序列号增1。接收者通过序列号来检测报文丢失情况,重新排序报文,恢复数据。

timestamp: 32bits 时间戳 同一帧数据时间戳相同

SSRC: 32bits 同步信源标识符 

CSRC list: 32bits  0-15个, 每个占32bits 由CC决定个数

RTP 扩展头部格式如下

RTP介绍_第2张图片 

第3~4字节表示扩展数据长度,后面跟扩展数据。

三、负载数据

RTP负载H264

参考rfc6184 rtp负载h264

packetization-mode(打包模式)  该字段在sdp中体现。其中RTSP是在 DESCRIBE响应中携带。

0或不存在  Single NAL unit mode 单一nalu单元模式

1-Non-interleaved mode 非交织模式 目前最常见

2-Interleaved mode  交织模式 

目前RTP库支持0和1模式

Nal Unit 如下

RTP介绍_第3张图片

F : 1bit 禁止位

NRI: 2bits  nal_ref_idc nal 用于指示该 nalu 的重要性

Type: 5bits  nal_unit_type

不同打包模式支持的打包方式如下:

RTP介绍_第4张图片

Single NAL unit mode 支持NAL unit

Non-interleaved mode 支持NAL unit、STAP-A、FU-A(最常见)

Single NAL unit Packet(单一打包)

RTP介绍_第5张图片

当一帧数据小于MTU时候,可采用该方式打包, 去掉起始头(000001) 

FU-A分片模式

当一帧长度过长时候,可选择FU-A分片模式打包, RTP负载格式如下

RTP介绍_第6张图片

 

H264 Nalu头和RTP FU indicator FU header关系如下

RTP介绍_第7张图片

FU-A头部由2个字节组成, FU indicator和FU header各占一个字节

FU indicator如下

RTP介绍_第8张图片 

type=28 

FU header如下

RTP介绍_第9张图片

S: 1bit   分片开始描述符  1-表示开始 0-不是开始

E: 1bit  分片结束描述符  1-表示结束 0-不是结束

R: 1bit  保留位

Type:  5bits  NAL Unit type  对应H264中的nalu type。

RTP负载H265

参考rfc7798 rtp负载h265 

NAL Unit Header如下

RTP介绍_第10张图片

F: 1bit 禁止位
Tyep: 6bits nal unit type

LayerId:  6bits  表示NAL所在的Access unit所属的层,该字段是为了HEVC的继续扩展设置。也就是目前都是0

TID:  3bits 指定nal单元加1的时间标识符。时间id的值等于tid-1,tid的值为0是非法的,

Single NAL unit Packet(单一打包)

RTP介绍_第11张图片

PayloadHer: 负载头  从H265 NAL unit复制过来  Type值为1~47

DONL(Decoding Order Number): 解码序列号

Fragmentation Units(分片包)

RTP介绍_第12张图片

H265 Nalu头和RTP FU indicator FU header关系如下

RTP介绍_第13张图片

PayloadHer 中Type=49

FU header如下

RTP介绍_第14张图片

    S : 1bit 分片开始描述符  1-表示开始 0-不是开始

    E:  1bit 分片结束描述符  1-表示结束 0-不是结束

    FuType: 6bits 表示Nal Unit的类型 和h265中的nal_unit_type取值相同

RTP负载通用数据

包括负载G711A, G711U, PS等数据 可直接负载

RTP介绍_第15张图片

RTP负载AAC

参考rfc3640rtp负载aac

需剥掉adts头。

你可能感兴趣的:(实时音视频,h.264,h.265)