列号
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;