首页 >> 通信技术 >> 要闻 >> 正文
 
基于ARM的移动视频监控终端设计与实现[图]
http://www.cww.net.cn   2012年8月1日 13:30    

  2.1.2 视频流传输

采用UDP协议传输RTP包时会出现乱序的现象,所谓乱序就是监控终端接收到RTP包顺序可能前端发送的顺序不一致,因此,首先要对接收的RTP包排序。采用在内存中建立一个双向链表来保存接收的RTP包,按照RTP报头的序列号(Sequence Number)顺序存放到链表中,双向链表结构体定义如下,部分变量用于RTP分片封包模式。
  

每当接收到一个新的RTP包后,根据序列号从链表尾开始搜索并插入到合适的位置,比如,接收到一个序列号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;接收到中间分片,在链表中找到时间戳相同的节点,将此RTP包序列号与起始序列号相减,计算出视频数据在链表的相对偏移,存储视频数据到链表相应位置,计数器加1;接收到结束分片(E=1),同中间分片一样,但还需要保存结束分片序列号。每接收一个RTP包后判断NALU完整性,在接收到起始分片、结束分片的前提下,结束分片序列号与起始分片序列号之差是否等于计数器的值,以此判断一个NALU是否接收完整,若接收到所有分片,置位结构体中FrameCompelere,解码器可根据此位判断NALU完整性。

2.2 H.264解码器的实现

监控终端通过网络接收到H.264视频流后,需要移植H.264的解码库实现实时解码。在众多解码器中经对比和分析,选用ffmpeg开源解码器来实现。ffmpeg库为音视频数据分离、转换、解码提供了完整解决方案,其中两个重要库libavformat和libavcodec,分别支持各种音视频文件格式和音视频解码器。

[1]  [2]  [3]  
来源:现代电子技术   作 者:廖志川 俞子荣 陈黎娟编 辑:高娟    联系电话:010-67110006-853
分享到新浪微博 分享到搜狐微博 分享到腾讯微博 分享到网易微博 分享到139说客 分享到校内人人网 分享到开心网 分享到QQ空间 分享到豆瓣 分享到QQ书签       收藏   打印  论坛   推荐给朋友
关键字搜索:NALU  视频监控  监控终端  实时解码  视频数据  
文章评论查看评论()
昵称:  验证码:
 
相关新闻
即时新闻
通信技术
最新方案
企业黄页
会议活动