Linux下视频流多播速率控制方法的设计与实现

来源 :电脑知识与技术·学术交流 | 被引量 : 0次 | 上传用户:ylycxr
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要:针对目前流媒体中视频数据发送速度难以控制的问题,以当前广泛使用的MPEG2视频解码模型为例,设计并实现了一种Linux下视频流多播速率控制方法。这种方法能够有效的控制服务器视频数据的发送速率,具有占用服务器资源少,适应各种网络要求的优点。经Linux平台验证结果表明,传送视频数据的网络速度平稳,未出现视频数据溢出现象,可以得到良好的视频效果,具有很好的实用价值。
  关键词:视频流;多播;速率控制;解码器
  中图分类号:TP37文献标识码:A文章编号:1009-3044(2008)08-10ppp-0c
  
  1 引言
  
  随着网络、通信等技术的发展,流媒体技术在很多领域都得到了广泛的应用,例如VOD、电视会议、远程教育等,而流媒体技术的关键技术之一就是流媒体的网络传输技术。一般来说,网络传输方式包括单播、多播和广播。与网络单播和广播技术相比,组播是一种优化使用带宽的路由技术,允许数据流从一个源或多个源发送到多个目的地。采用组播技术后,应用仅发送每个数据包的一个拷贝给一组要接受信息的计算机,因而组播有助于控制网络的流量,减少主机的处理量[1]。正是因为组播具有单播、广播所不具有的优点,而流媒体又有流量大、实时性强的特点,所以组播技术在流媒体技术中得到了广泛的应用。
  从当今市场上来看,主流的流媒体技术产品有三种,分别是Microsoft的Windows Media Techology系统、Real Networks公司的Real System系统以及Apple的Quicktime系统[2]。尽管它们有些产品也具备了组播的功能,但是它们有一个缺点就是必须满足它们自己的视频压缩格式,才能进行流媒体传送。而本文的目的是只需有视频的解码器,就可以开发出适合自身需要的流媒体系统,这样就可以满足不同视频压缩格式文件网络传输的需要。
  如果视频发送速率没有得到有效的控制,当发送速率高于正常发送速率时,将会出现如图1所示的情况,出现许多的马赛克;当发送速率低于正常发送速率时,解码器将会因为不能及时的解码器而出现画面暂停的现象。目前,视频组播速率控制研究主要基于三种速率控制手段,即基于发送端的速率控制、基于接收端的速率控制和混合性速率控制的方法。发送端的速率控制方法主要基于反馈信息进行速率调节,可以适用于单播的方式或组播的方式。在基于接受端的速率控制中,发送方不参与速率控制,而由接受方通过增加和减少通道的数量来进行速率的调整。通常,这种方法用于采用可扩展编码的组播的情况,组播的视频流分为多层,每个层对应组播树的一个通道。混合性速率控制的方法,兼有二者的特点,即接受方增加减少通道,而发送方同时根据反馈调整各个通道的速率[3]。
  本文设计并实现了一种Linux下视频流多播速率控制方法。这种方法属于发送端的速率控制方法,基于实时解码情况,得到反馈信息,从而实现视频组播发送速率控制。这种方法以视频解码模型为基础,以MPEG2为例,测试环境为局域网。在此基础上,采用类比的方法,MPEG2压缩格式可以推广到MPEG4、H.263和H.264等视频压缩格式;同理,局域网环境也可以推广到校园网、企业网等网络环境。
  
  图2 局域网连接示意图
  
  下面介绍一下这两部分程序的工作原理及如何进行协同工作。整个方法的执行过程为:
  (1)视频组播发送程序首先读取需要发送的一组视频文件数据;
  (2)视频组播发送程序然后将这部分视频数据组播至解码程序;
  (3)解码程序在接收到视频组播发送程序发送过来的组播数据之后进行解码;
  (4)解码程序解码完之后,如果:
  ①未解完一帧数据,则继续,跳至5)继续执行;
  ②解完一帧数据,判断是否继续执行,判断的依据为:
  (当前时间 - 上次显示的时间) >= (1000000/帧率)… (依据1)
  当满足依据1的时候,则跳至(5)继续执行,否则:
  while((当前时间 - 上次显示的时间) < 1000000/帧率)
  {
  执行空指令;
  读取当前时间;
  }
  注:上述的时间的单位均为微秒,执行空指令的作用为延时作用。
  (5) 解码程序将一个握手信息通过TCP连接发送至视频组播发送程序;
  (6) 视频组播发送程序在接收到握手信息之后,如果未至视频文件尾,则继续读取一组视频数据,然后跳至(2)继续执行,直至读取视频文件结束。
  
  3 发送速率控制方法的实现
  
  在上述讲到,服务器程序由两部分程序组成:视频组播发送程序和MPEG2解码程序。下面分别详细介绍这两部分程序的运行步骤和内容。本方法开发的环境为linux,采用gcc进行编译,网络连接图如图2所示。
  3.1 视频组播发送程序实现
  下面介绍一下视频组播发送程序的实现步骤:
  (1)定义组播地址及端口号,定义发送缓冲区的容量为4KB(因为上述的解码器每次处理4KB的数据),定义一个TCP连接用的端口号以及网络的其它一些参数;
  (2)建立一个基于UDP连接的组播用的套结字,绑定好相应的端口号;
  (3)建立一个基于TCP连接的套结字,用于和解码程序进行通信,然后进行端口绑定、连接以及监听;
  (4)读取文件的4KB数据,通过UDP组播发送至解码程序;
  (5)等待解码程序发送回来的握手信息(如hello信息),如果收到握手信息,重复(4)操作,否则一直等待解码程序发送过来的握手信息(如hello信息);
  (6) 直至文件结束,发送完数据为止。
  3.2 解码程序实现
  解码程序的实现是以开源软件libmpeg2(http://libmpeg2.sourceforge.net/) 为原型,添加了网络组播接收、发送速率控制以及发送握手信息功能。后面列出具体的函数名称为libmpeg2开源软件中的函数名称。下面介绍一下解码程序具体实现的程序流程:
  (1)处理程序的输入参数,调用handle_args()函数;
  (2)初始化解码器参数,给部分参数分配内存,调用mpeg2_init()和mpeg2_malloc_hooks()函数;
  (3)判断视频的封装形式:
  1)如果是pva文件封装格式,则调用pva_loop()函数;
  2)如果是TS视频流(一般是卫星电视传送采取的格式),则调用ts_loop ()函数;
  3)如果是PS视频流(一般是DVD等所采取的格式),则调用ps_loop ()函数;
  4)如果是ES纯视频流,则调用es_loop ()函数。
  (4)解码完毕,释放分配的内存空间。
  这里,MPEG2的封装形式采用PS视频流,因为这种封装形式应用非常广泛,例如VCD中的dat文件,DVD中的vob文件,都是采用PS视频流结构。下面详细介绍一下PS视频流的处理过程及其步骤。
  (1)定义组播地址及端口号,定义接收缓冲区的容量为4KB(因为解码器每次处理4KB的数据,当然这个数据可调),定义一个TCP连接用的端口号以及网络的其它一些参数;
  (2)建立一个基于UDP连接的组播用的数据报套结字,绑定好相应的端口号;
  (3)加入多播组;
  (4)建立一个基于TCP连接的流式套结字,用于和视频组播发送程序进行通信,然后进行端口绑定、连接以及监听;
  (5)监听组播发送程序端口;
  (6)等待视频组播发送程序发过来的多播数据,如果有多播数据到达,则读取组播发来的视频流数据,否则,继续等待;
  (7)调用解视频流封装函数demux( )。demux( )函数主要内容为:
  如果4K数据中包含视频流数据,则调用mpeg2解码器来对数据进行解码,调用decode_mpeg2()函数。
  (8)是否到文件结尾,如果是则结束,否则跳至(6)执行。
  最后,介绍一下decode_mpeg2( )函数的运行步骤:
  (1)分配内存空间给解码器用,调用mpeg2_buffer( )函数;
  (2)获取视频的头信息,调用mpeg2_info( )函数;
  (3)分析视频流数据,获取现在的状态信息:
  1)如果是序列头(sequence)信息,则执行case STATE_SEQUENCE部分的内容;
  2)如果是图像头信息,则执行case STATE_PICTURE部分的内容;
  3)如果是slice信息,或者序列结束,或者无效的结尾标志,判断是否解完一帧:
  ①如果未解完一帧数据,则跳出decode_mpeg2( )函数,继续执行;
  ②如果解完一帧数据,则判断是否继续执行,判断继续执行的依据如依据1所述。如果满足依据1则跳出decode_mpeg2( )函数,继续执行,否则一直等待直至满足依据1这个条件。
  ③如果不是参考帧,在显示完后将解码后的视频数据丢弃,否则不能丢弃,用来作为参考帧的数据。
  
  4 结果分析
  
  测试结构如图2所示,测试环境为linux,编译和调试工具分别为gcc和gdb。经多次反复测试发现本程序不仅可以针对CIF、D1大小的图像进行组播,还可以对高清节目(测试分辨率为1920* 1080i)进行组播,用户接收效果良好,经多次测试,未出现任何跳帧、数据溢出的现象。下面只列出其中一组分别为CIF、D1和高清节目进行组播时的网络接收速度的状况图,如图3、4、5所示。图中横坐标为时间,纵坐标为客户端的网络接收速率。
  
  图4 D1大小
  
  图5 高清分辨率(1920* 1080i)大小
  
  由于视频组播发送程序和MPEG2解码程序之间采取的是可靠的TCP连接,因此,除了极少数出现的网络丢包情况外,端到端的丢包情况不存在,此外,也不存在缓冲区丢包的情况。
  
  5 结论
  
  本文设计并实现了一种Linux下视频流多播速率控制方法。在linux环境下,用gcc进行了编译,得以成功的实现。测试结果发现该方法不仅可以针对高清节目及以下任意分辨率的视频进行组播发送,而且通过MEPG2的例子,还可以将这种方法扩充至对MPEG4、H.263、H.264等国际化标准的视频压缩格式的支持,具有良好的实用价值。
  
  参考文献:
  [1]汪凡.组播技术概述[J].中国金融电脑,2001,(3):92-93.
  [2]王萍,赵明,等.流式媒体中的关键技术[J].安徽大学学报,2006,(1):31.
  [3]杨明川,解冲峰.Internet视频传输中的关键技术分析[EB/OL].http://www.chinatelecom. com.cn,2002-12-27.
  [4]Floyd S,Handley M,Padhye J,et al.Equation-Based Congestion Control for Unicast Applications[J].The Extended Version,2000,(2):147-163.
  [5]李飞,杨林军,王新,等.基于端系统的视频流组播速率控制方法[J].计算机应用与软件,2007,24(6):49-52.
其他文献
摘要:本文介绍解决私网地址的网络接入 Internet 问题的NAT技术,对NAT的工作原理以及4种配置NAT的具体方法进行了深入阐述,并就NAT技术在校园网中的应用作具体配置。  关键词:IP地址;路由器;NAT;PAT  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)12-20ppp-0c    The NAT Technique Principle Invest
统编小学语文教材中的古诗词增加至114首,有的以讲读课文形式出现,有的在单元读写中呈现,其重要性不言而喻。当这些古诗词进入课堂教学时,它们经由意象而产生的别样的意境之美对提升学生的审美素养有着不可替代的作用。然而,目前的古诗词教学往往存在一种认识误区,即觉得小学生年龄小,理解能力、鉴赏能力差,而古诗词又距离学生太远,故不宜作深入的赏析。  那么,学生在古诗词学习中到底能不能有自己的审美发现和体验?
汉语文化是全球性的文化,它不仅在东亚文化圈、欧美文化圈产生过重要影响,在东南亚、南亚、阿拉伯世界也都产生过重要影响。《中国古典文学的英国之旅》一书旨在对中国古代文化经典在域外的传播和影响進行系统研究,突破了以往将中国古代文化经典的研究局限在中国本土的研究方法,将研究视野扩展到世界主要国家,以此说明汉语文化的世界性意义。该书由福建师范大学葛桂录教授主编,立足于英国汉学发展的原典文献和19-20世纪中
摘要:随着网络技术的发展,网络安全问题也日趋严重,作为典型的DDOS攻击方式,SYN Flood攻击因为其隐蔽性和高效性颇受攻击者青睐,更为严重的是,现在尚无完全令人满意的防护手段,单一的防范手段往往达不到安全防范的效果;文章以典型攻击为案例,在系统分析现有的常规防御技术手段的基础上,结合相关安全管理策略,设计了一套涉及预防、监控/识别、安全加固调整和恢复等关键环节的综合安全解决方案;实际运行表明
摘要:语用分析是在文学作品中用语言达到自己目的的一种手法,同时,语用研究也是研究语言学的重要手法,在文学作品中,语用分析也成为了研究文学对象的重要手法。本文通过语用分析,进一步探究了著名爱情小说《飘》中的语用分析及其对文学文本本身产生的重要作用。  关键词:飘 语用分析 违背合作  玛格丽特·米切尔是美国小说作家,《飘》是其倾注了大量心血和时间著成的作品,也是她唯一的作品。《飘》自从问世以来,已经
摘要: BPEL4WS(业务流程执行语言,简称BPEL)是当前服务合成的首选标准语言,但因为它是流程组织的描述语言,所以并不提供处理异构数据的机制。为了解决BPEL系统开发中遇到的数据转换方面的表达和处理问题,提出一种扩展BPEL规范中赋值活动的属性的方法,使BPEL引擎可以满足大部分复杂的数据处理需求,并支持通过业务规则引擎进行数据处理。  关键词:BPEL扩展;数据转换;业务规则   中图分类
摘要:结合学生的学科专业特点和学校区域分布,对学生进行学科分类,同时对Internet技术进行层次划分,形成按学科分层次的Internet技术教学特点。在课程教学改革与创新过程中,采取多种形式增强学生Internet技术的应用能力。  关键词:学科分类;Internet技术;教学改革与创新  中图分类号:TP393文献标识码:A文章编号:1009-3044(2008)27-2022-02  Inn
摘要:研究了软件PLC中梯形图的逻辑化表达以及编译为指令表的实现方法,对梯形图元素之间的串并联关系进行了深入探讨,在此基础上给出了基于C 的梯形图逻辑表达模型,实现了梯形图到指令表的转换。该实现在可扩展性以及支持复杂梯形图转换方面具有一定优势。  关键词:软件PLC;梯形图;逻辑表达模型  中图分类号:TP273文献标识码:A文章编号:1009-3044(2008)33-1399-03  On
【教学要求】  一、通过桂林山水独特的美,引导学生感受祖国河山的美,对学生进行爱国主义教育。  二、通过看图学文,进一步训练学生的观察能力,并在观察中展开合理的想象。  三、掌握本课主要词语:无瑕、峰峦雄伟、奇峰罗列、形态万千、危峰兀立、连绵不断等,认识排比句。  四、能正确、流利、有感隋地朗读课文,并能背诵。  【课前准备】  一、让学生看有关桂林山水的风景照片。  二、放大课文插图。  【课时
著名大熊猫摄影家,国礼《中国大熊猫》画册作者。中国摄影家协会会员,中国新闻摄影学会会员,中国艺术摄影学会会员。曾先后荣获中国摄影家协会“德艺双馨优秀会员”“抗震救灾优秀摄影家”等称号。  迄今已在国内外各类报刊杂志上发表摄影作品、文章5000多幅(篇),其中400多幅作品入选省、全国和国际影展。作品曾赴美国、俄罗斯、法国、意大利、日本、西班牙、德国、英国、瑞士、土耳其、伊朗、比利时等国展出。  出