background image

列号

SN=26 的 RTP 包在链表中分配内存,找到位于 25,27 之间的位置插入该包,RTP 包

排序过程如图

3 所示。

H . 264 视

频 流

NALU 单

元 封 装 成

RTP

包 时 , 要 遵 循
RTP 负载格式标
准 ,

H . 264 负

载格式定义了

3 种类型的负载结构:单一 NALU 模式、组合封包模式、分片封包模式。单一

NALU 模式是一个 RTP 包仅由一个完整的 NALU 组成;组合封包模式是可能由多个 NALU
组成一个

RTP 包;分片封包模式是将一个 NALU 单元封装成多个 RTP 包,采用分片封包模

式的原因是网络传输协议有最大传输单元

(MTU)一般为 1500B 上限,如果 NALU 大于

MTU,IP 层将其自动分割为几个小于 MTU 的数据包,这样无法检测数据包是否有丢失,
所以有必要采取分片封包模式,在接收端把拥有相同时间戳的多个

RTP 包按照序列号重组

成一个完整的

NALU。分片封包模式的 RTP 包格式如图 4 所示。

FU 

indicator

Type 字 段 表

RTP 采 用

的 负 载 结 构 ,
28 , 29 时 表
示采用分片封
包模式,

NRI

字段的值根据
NALU 的 NRI
值设置。

FU header 的 S 位置 1 时表示该包是 NALU 的起始分片,E 位置 1 时表示该包是

NALU 的结束分片。

2.1.3 RTP 丢包处理

由于网络稳定性原因,可能造成

RTP 丢包的情况。针对单一 NALU 模式和组合封包模

式丢包不会影响解码器的正常工作,会导致监控画面花屏或跳帧想象,但对于实时监控是
在可承受的范围。对于分片封包模式丢包会造成接收端收到一个不完整的

NALU,对一个不

完整的

NALU 解码可能造成解码失败,甚至系统崩溃。因此,对于分片封包模式的 RTP 包

需要判断接收的

NALU 是否丢包。

传输分片封包模式的

NALU 时,一个 NALU 分割封装成若干个 RTP 包具有相同的时间

戳、依次递增的序列号。对接收的

RTP 包根据 FU header 头信息做不同的处理:接收到起始

分片

(S=1),根据序列号在链表中添加节点,保存视频数据、起始分片序列号,计数器加 1;