一种基于RTP协议实现I帧重传的方法与流程

文档序号:12789581阅读:1500来源:国知局
一种基于RTP协议实现I帧重传的方法与流程

本发明涉及视频监控领域的视频传输方法,尤其涉及一种基于RTP协议实现视频流I帧重传的方法。



背景技术:

实时传输协议RTP(Real-time Transport Protocol)是一个网络传输协议,它是由IETF的多媒体传输工作小组1996年在RFC 1889中公布的,后在RFC3550中进行更新,RTP协议常用于流媒体系统,为数据提供了具有实时特征的端对端传送服务,如在组播或单播网络服务下的交互式视频音频或模拟数据。

RTP协议固定头数据结构如下表所示

其中,X表示扩展标志,占1位,如果X=1,则在RTP固定头后跟有一个扩展报头。RTP协议扩展头数据结构如下表所示,

视频监控应用中,视频流的数据量很大,为缓解传输和存储的压力,往往需要对其进行压缩编码。H.264是一种视频编码标准,其特点是高压缩比,高质量,且支持多种网络的流媒体传输。其理论依据是,大多数情况下,摄像机拍摄的实际场景的视频流中,每一个图像帧与其相邻帧的平均差别约为10%,因而传输视频流时,可将该视频流分为多个序列,每个序列里面包含多帧差别很小而且连续的图像帧;其中第一帧图像称为I帧,其压缩比最低,压缩后可以在不借助其他帧的情况下,恢复成原始状态;同一序列中,除了I帧之外,还有P帧和B帧,其压缩编码时记录了该帧与I帧或其他P帧或B帧的差异情况,对其做解压缩过程,都需要直接或间接参考I帧才能实现,因此如果I帧丢失,将无法恢复该序列时间内的视频数据,造成视频丢失。

当今的视频监控系统越来越复杂, 网络视频传输过程中,网络传输错误或丢包的现象无法完全避免,而且RTP协议底层是基于UDP,天然具备不可靠性,复杂网络环境下,适应性不佳。如果网络传输错误或网络丢包造成B帧或者P帧丢失,对视频流的影响尚且不大,但如果丢失的是I帧,将造成一段视频序列的丢失。因此,需要设计一种视频流的I帧重传方法,保证视频流传输到目的端之后能得到最大程度的还原。



技术实现要素:

本发明旨在提供一种基于RTP协议实现I帧重传的方法,防止网络传输错误或丢包造成视频流传输过程中关键视频片段的丢失。

为了实现上述目的,本发明提供了一种基于RTP协议实现I帧重传的方法,包括如下步骤:

(1)定义RTP扩展协议,将RTP原协议中固定头的扩展标志位写为“1”,启用扩展头,并在扩展头中将Header Extension扩展三个字段:包括长度为16bit的帧类型(frame type)字段,长度为8bit的重传起始包号(seq start)字段,长度为8bit的重传结束包号(seq end)字段;

(2)视频数据发送端创建重传缓存区,缓存I帧数据,随时准备重传数据;

(3)视频数据接收端每组装一个I帧数据时,检查是否有缺失的数据包,及时回传(1)中定义的RTP扩展协议,请求视频数据发送端重传数据;

(4)发送端收到重传请求后,解析协议,获取需要重传的包号;从所述重传缓存区中,根据包号检索出重传的数据,回发给接收端;

(5)接收端三次发出重传请求,但仍收不到重传的数据,则丢弃当前要拼装的I帧。

所述RTP扩展头部的帧类型字段,用于区分I帧、P帧、B帧三种不同的帧类型。

所述发送端重传缓存区的数据结构为平衡二叉树。

所述发送端重传缓存区的大小,依据不同型号设备的性能做不同的设置。

本发明的有益效果是,很大程度上解决了视频码流在公网传输中,丢包和视频流乱序现象频发,造成视频卡顿、观看体验变差的问题;以及在极端弱网络环境下(带宽窄、延时高),视频无法解码播放的问题。

附图说明

图1是本发明所述RTP扩展头部的数据结构;

图2是本发明所述方法的数据流传输示意图。

具体实施方式

下面结合附图对本发明作进一步描述:

如图1所示,一种基于RTP协议实现I帧重传的方法,包括如下步骤:

(1)定义RTP扩展协议,将RTP原协议中固定头的扩展标志位写为“1”,启用扩展头,并在扩展头中将Header Extension扩展三个字段:包括长度为16bit的帧类型(frame type)字段,长度为8bit的重传起始包号(seq start)字段,长度为8bit的重传结束包号(seq end)字段;

(2)视频数据发送端创建重传缓存区,缓存I帧数据,随时准备重传数据;

(3)视频数据接收端每组装一个I帧数据时,检查是否有缺失的数据包,及时回传(1)中定义的RTP扩展协议,请求视频数据发送端重传数据;

(4)发送端收到重传请求后,解析协议,获取需要重传的包号;从所述重传缓存区中,根据包号检索出重传的数据,回发给接收端;

(5)接收端三次发出重传请求,但仍收不到重传的数据,则丢弃当前要拼装的I帧。

所述RTP扩展头部的帧类型字段,用于区分I帧、P帧、B帧三种不同的帧类型。

所述发送端重传缓存区的数据结构为平衡二叉树。

所述发送端重传缓存区的大小,依据不同型号设备的性能做不同的设置。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1