编程论坛
直播中

刘凯

7年用户 189经验值
私信 关注
[问答]

求一份嵌入式视频服务器软件的设计方案

什么是H.264视频编码技术?
是什么构成了视频监控系统的总体结构?
怎样去设计视频监控系统?

回帖(1)

姚庭芳

2021-4-27 14:10:58
  1 引言
  基于IP网络的嵌入式视频服务器以体积小、功耗低、便携、安装方便等优点,成为前端视频采集设备的监控系统。
  本文介绍了自主开发的嵌入式视频服务器方案。该方案采用嵌入式处理器Hi3510和操作系统μC1inux,通过自行开发的视频服务器软件,使客户端完成与视频服务器的通信和对云台、摄像头等设备的控制。论文介绍了服务器端软件的总体结构以及视频存储(多磁盘调度算法)、RTP传输模块的实现和发送缓冲区的结构设计,并进行了实验测试。实验结果表明,系统采用H.264编码技术在保证视频传输质量的同时具有良好的带宽适应能力。
  2 H.264视频编码技术
  H.264是ITU-T视频编码专家组(VCEG)和ISO/IEC活动图像编码专家组(MPEG)的联合视频组(JVT)开发的一个新的数字视频编码标准。
  在技术上,H.264标准有很多优势,如统一的VLC符号编码。高精度、多模式的位移估计,基于4*4块的整数变换、分层的编码语法等。这些措施使得H.264算法具有很高的编码效率,在相同的重建图像质量下,能够比H.263降低50%左有的码率。H.264的码流结构网络适应性强,增加了差错恢复能力,能够很好地适应IP和无线网络。
  H.264能以较低的数据速率传送基于IP的视频流,在视频质量、压缩效率和数据包恢复丢失等方面,超越了现有的MPEG-2、MPEG--4和H.26x视频通讯标准,更适合窄带传输,是目前监控系统最为理想的信源压缩编码标准。
  3 视频监控系统总体结构
  如图1所示,摄像头将采集到的视频传送到视频服务器,视频服务器对视频进行格式转换与编码后,通过Internet传送到客户端。通过客户端软件可以调整云台的转动和摄像头的焦距、光圈等。
  
  图1视频监控系统构成
  图1中的视频服务器主要由4个模块构成:视频采集和模数转换、H.264编码、视频存储、RTP传输。从摄像头采集到的多路视频信号是模拟信号,视频服务器需要将其转化为数字信号,并将多路信号合成一路。H.264编码模块负责对输入的图像进行压缩编码。视频存储模块负责将视频流存储在外接硬盘上,传输模块基于RTP协议,负责将H.264视频流传送到远程视频终端。
  服务器支持PC客户端和手机客户端同时浏览,大大增强了监控的移动性。服务器可外挂多个硬盘,具备硬盘录像机的功能。安全性方面——支持异常检测功能,当发现异物闯入时,自动报警并将发牛异常的场景网像以彩信的方式发至手机。
  4 各模块设计与实现
  4.1视频存储多磁盘调度算法
  为了增强视频服务器的性能.增加了视频存储模块,使之同时具有硬盘录像机的功能。设计方面,通过在服务器上外挂多个硬盘来解决磁盘空间需求量大的问题。但这也带来了另外一个问题:在多个硬盘的情况下如何进行有效的存储调度,使得监控系统的多路同时存储,保证有很高的效率。
  本文参考文献4的算法思想来解决多磁盘的有效存储调度,即通过计算各磁盘剩余空间百分比和访问线程数来确定新的存储线程应该访问的磁盘。算法描述如下:
  1.计算各磁盘剩余空间大小。
  2.计算各磁盘剩余空间的百分比:剩余空间,剩余总空间。
  3.计算各磁盘访问的最大线程数:最大线程数等于各磁盘剩余空间的百分比乘以系统总的存储路数。并计算出1/2最大访问线程数。
  4.如果剩余空间百分比最大且未达到1/2最大访问线程数,选择此磁盘进行存储.同时当前访问线程数加1;如果达到或超过l/2最大访问线程数,则选择其它剩余空间百分比中最大且未达到1/2最大访问线程数的磁盘。
  5.如果所有硬盘的访问线程数均达到1/2最大访问线程数,则选择剩余空间百分比最大且未达到最大访问线程数的磁盘进行存储。
  6.如果每个硬盘都达到了最大访问线程数.则无可用磁盘。
  该算法利用各磁盘剩余空间百分比和当前访问线程数来确定存储的硬盘,避免了小空间硬盘不久就被用完,而最终所有视频都存储一个硬盘的情况。
  4.2 RTP传输
  视频监控系统的关键是将视频流通过Internet传输到远程客户端进行实时浏览,所以服务器端软件传输部分的设计至关重要。由于TCP协议“三次握手”和数据重传机制导致的延迟使其不适用于实时监控系统的视频传输。本文采用目前流媒体广泛采用的RTP传输协议,通过和UDP共同完成传输层协议功能。
  RTP本身并不能为按顺序传送的数据包提供可靠的传送机制,也不提供流量控制或拥塞控制,它依靠RTCP提供这些服务。在RTP会话之问周期地发送一些RTCP包,RTCP包中含有丢失的数据包的数量、传输延迟等统计资料。因此,服务器可以利用这些信息动态地改变编码码率。RTP和RTCP配合使用,能以有效的反馈和最小的开销使传输效率最佳化,因而特别适用于实时监控系统。
  
  图2 反馈控制原理图
  如图2所示,丢包率统计模块生成接收报文并定期通过RTCP将报文发回服务器的反馈控制模块,报文中含有丢包率和传输延迟等数据。反馈控制模块根据报文评估当前网络状况,通知编码器对码率做出适当调整。
  丢包率的计算:
  I.丢包大小的计算
  计算在第n个周期丢包的大小:L(n)=S(n)一R(n);
  L(n)是第n个周期丢包的大小,S(n)是第n个周期服务器发送的包大小(包大小依据RTP包的序号获得),R(n)是第n个周期客户端收到的包大小。
  II.丢包率P(n)=L(n)/S(n)
  服务器端反馈控制模块根据丢包率判断当前网络状况.但为了避免频繁地调整码率不能只参考一个P(n)值。这里采用一种线性的数学方法来计算丢包率:计算5个P(n)值的平均值A(n)。
  A(n)=(P(n)+P(n-1)+P(n-2)+P(n-3)+P(n-4))/5,n)=5
  将网络状态分为三种情况:无负载(unloaded),负载(1oaded),拥塞(congested)。如果A(n)小于数值a网络状态为unloaded,介于a和b(包括a)之间为loaded,否则为congested。数值a和b的大小可以参考其它一些文献。
  4.3 发送缓冲区的设计
  服务器将采集到的视频数据编码后放入缓冲区队列,并发送给客户端;客户端接收视频数据到接收缓冲区队列,立即回放(如图3)。
  
  图3视频传输及缓冲区结构图
  在服务器端,首先使用SDK提供的GetStream函数获得编码码流,在此,我们定义了视频编码码流缓冲区的数据结构,用于记录视频编码码流数据。
  struct VENC_STREAM_S{
  usigned int DataNum; /* 产一帧码流的所有片的个数 */
  usigned int DataLen; /* 产一帧码流的所有片长度总和 */
  VENC_DATA_S struData [VENC_MAX_NALU_NUM_IN_FRAME]; /* 获取码流结构*/
  VENC_STREAM_INFO_S struDataInfo; /* 严码流信息 */
  };
  5 系统测试及实验结果分析
  服务器对CIF和QCIF格式的视频实现了实时传输,且很好地保证了视频的质量。实验主要测试了在不同码率、GOP的条件下,视频传输帧率和Y分量的PSNR值。实验结果如表1所示。
  表1不同码率、GOP下的PSNR-Y的比较
  
  从实验结果可以看出,相同格式的视频,在码率相同的情况下,GOP小的视频质量较好,这说明插入1帧可以有效地改善视频的质量;而码率的降低对视频的传输和质量影响较大,产生了一定延迟。
  6 结论
  本文介绍了视频服务器存储(多磁盘调度算法)、RTP传输模块的实现和发送缓冲区的结构设计,给出了软件设计的基本思想。实验表明,应用本文所设计的视频服务器软件,成功实现了视频的实时传输,在保证视频质量的同时具有良好的带宽适应能力。
  本文作者创新点:开发完成了嵌入式视频服务器软件的设计,加入了网络传输反馈机制,增强了视频服务器网络带宽的自适应性,保证了视频的传输质量。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分