具有P2P功能的嵌入式流媒体播放器的设计

2014-04-03 07:33金保召
计算机工程与应用 2014年15期
关键词:解码嵌入式客户端

曹 洁,金保召,赵 宏

CAO Jie,JIN Baozhao,ZHAO Hong

兰州理工大学 计算机与通信学院,兰州 730050

School of Computer and Communication,Lanzhou University of Technology,Lanzhou 730050,China

1 引言

随着互联网技术和流媒体技术的飞速发展,网络数字视频传输技术正被广泛应用于新闻发布、视频点播、实时视频会议、远程教育等各个领域。基于IP流媒体技术的嵌入式流媒体终端因其使用方便,便于携带而受到用户青睐,逐渐成为研究的热点,拥有广阔的市场前景。如文献[1]基于DirectShow技术,针对移动网络不稳定、带宽小的特点,采用RTCP反馈机制、缓冲区管理和音视频同步机制来设计移动流媒体播放器,但该播放器仅在Hopen手机模拟平台上模拟运行,其在硬件平台上的播放性能有待进一步测试。文献[2]采用MPEG-4视频压缩标准和RTP/RTCP协议实现了基于3G无线网络的移动视频监控系统,但由于流媒体播放时对网络带宽的高占有特性,使得传统的C/S方式很容易导致服务器成为系统瓶颈,限制系统的服务能力。文献[3]提出了一种基于DM6446的嵌入式P2P流媒体播放器的设计模式,同时对媒体数据加载和音视频同步作了深入的研究,但采用专用的编解码芯片在保证系统实时性的同时带来系统功能定制性不强、性价比较低等问题。文献[4]提出利用平均速率、时延抖动和辅助系数η三个参数进行缓冲区长度估算的简化算法,并提出了在客户端按照数据的重要性或优先级的不同实施主动抛弃策略,但该方法仅进行了软件模拟仿真并未在硬件设备上实现。

针对上述问题,本文提出以S3C6410为处理器的嵌入式流媒体播放终端的设计方案,充分利用S3C6410的多媒体数据处理能力[5],辅之以高效且可定制的多媒体数据编解码算法,以硬件加软件的方式实现一款功能稳定、性价比高,且支持算法升级的嵌入式流媒体播放终端。

2 系统结构设计

2.1 系统框架

为保证系统的模块性和功能的可扩展性,系统采用分层结构设计[6],从下往上依次为系统层、解码层和应用层,如图1所示,采用层次设计方式可在各层实现模块化的功能,将各层功能相分离,同时下层为上层提供服务接口,供上层调用。

图1 系统结构

如图1所示,第一层为系统层,系统层负责提供媒体数据传输、QoS(Quality of Service)控制机制、数据缓存空间管理和P2P数据转发等服务。其中,媒体数据传输服务包括本地媒体数据访问和接收来自网络的流媒体数据,其中,网络媒体数据的获取需要首先建立TCP连接,用于创建 RTSP(Real Time Streaming Protocol)会话,然后分别创建RTP(Real-time Transport Protocol)连接实现媒体数据传输和RTCP(Real-time Transport Control Protocol)连接实现媒体传输控制、保证媒体数据传输质量;QoS控制机制根据传输过程中已接收到的媒体数据信息和网络状态信息,周期性地向服务器端发送反馈控制信息,以动态调整媒体数据发送速率,实现流媒体数据传输的实时QoS控制[7];数据缓存空间管理服务主要包括数据缓存、流内同步以及与其他P2P节点交互等功能,数据缓存服务用于对接收到的媒体数据进行存储以减少因网络传输抖动而给媒体播放所带来的影响,流内同步机制采用双向循环队列作为其基本数据结构,对乱序到达的网络媒体数据进行处理,以保证播放时媒体流的时基顺序与原始媒体数据顺序一致;P2P数据转发服务的主要功能是将数据缓存空间中已播放但尚未丢弃的数据包转发给其他节点,以实现其他节点的P2P播放方式。

第二层为解码层,解码层主要包括解码器、音频解码库、视频解码库和音/视频流间同步机制,该层采用解码器和选择解码器组件相分离的层次结构,该结构有效地降低了层次间的耦合度,提高了解码层的可扩展性。首先,解码器由系统层的数据缓存区读取媒体数据,并根据媒体数据头信息判断媒体数据编码格式,选择相应的解码库进行解码[8]。然后,由于用户对声音的敏感程度较强,本文采用了基于解码时间戳(Decoding Time Stamp)的视频同步到音频的同步方式来实现音视频流间同步,该种流间同步机制的基本思想是以音频流为主媒体流、视频流为从媒体流,音频流以正常速度播放,根据当前播放的音频时间戳确定当前应当播放的视频时间戳,从而达到音视频同步播放的效果。

第三层为应用层,即用户界面层,作为用户与播放器的交互界面,该层用于播放用户请求的媒体文件,同时允许用户进行其他的操作,例如快进、快退、静音等操作。

2.2 缓存空间管理机制

当前流媒体播放技术均采用缓存技术[9],即客户端首先从服务器端下载媒体数据到本地缓存空间,然后开始对缓存空间内的媒体数据进行排序、解码、播放等操作,同时下载后续的媒体数据到本地缓存空间[10]。其缓存空间设计如图2所示,其中 p点表示缓冲空间起始点,也是本地播放点,d点表示新下载的媒体数据存储点,e点表示缓冲空间结束点。

图2 客户端缓存空间划分示意图

通常情况下,客户端会从缓存空间 p~d中不断读取媒体数据,解码播放后丢弃,以提供更多的空间d~e来存储后续下载的待播放的媒体数据,减少因媒体数据下载速度波动对播放带来的影响。传统的嵌入式硬件设备由于CPU、内存空间和数据传输等原因导致多媒体数据处理能力低下。随着嵌入式终端硬件设备的迅速发展,目前主流的S3C6410微处理器主频高达667 MHz且支持256 MB RAM内存[11],其内部集成了MFC(多格式CODEC)、3D图形引擎等硬件加速器,具有出色的多媒体数据处理能力,同时其外围扩展部件支持WIFI、蓝牙、红外等数据传输方式,最新的APQ8064微处理器已高达1.7 GHz、支持2 GB RAM内存[12]。高性能的CPU处理能力、不断增大的内存空间和高速的数据传输方式为P2P技术在嵌入式流媒体终端中的应用提供了硬件平台。

为了能够以P2P方式利用嵌入式流媒体终端设备中缓存的媒体数据,需要对终端设备中的缓存空间重新规划,使缓存空间中已播放的媒体数据保留一段时间,以便为其他节点提供服务。终端设备中缓存空间的设计规划要综合考虑终端设备对外提供服务的能力和自身播放的流畅性等问题。

根据P2P方式流媒体数据传输的特征[13],在缓存空间中增加一个新的区域,以存储本地已播放完成的媒体数据,如图3所示。其中,s表示缓存空间起始点;p表示本地播放点;d表示新下载媒体数据存储点;e表示缓存空间结束点。s~p之间存储的是本地已经播放完毕、能够向其他节点提供服务的媒体数据;p~d之间存储本地待播放的媒体数据;由于可用网络带宽波动使得媒体数据下载速度随之波动,导致d点经常左右移动,因此,此区间的媒体数据不作为服务数据对其他节点提供;d~e之间为存储新下载数据的预留空间。

图3 具有P2P功能的客户端缓存空间划分示意图

2.3 媒体数据下载速度调整策略

正常情况下,新下载的媒体数据以媒体播放速度进入缓存空间d~e,同时,缓存空间s~p中的媒体数据以媒体播放速度被丢弃,使得各点位置相对固定。当媒体数据下载速度大于播放速度时,点d将右移,使得d~e区间变小,缓存预留空间减小,p~d区间变大,本地待播放媒体数据增多;当媒体数据下载速度小于播放速度时,点d将左移,使得d~e区间变大,缓存预留空间增大,p~d区间变小,本地待播放数据减少。

网络可用带宽的波动会引起d点的移动,当节点播放速度较长时间低于媒体数据下载速度时,使得d点右移,最终与e点重合,从而导致新下载的媒体数据溢出而被丢弃,浪费系统资源和网络带宽;当节点播放速度超过媒体数据下载速度较长时间时,使得d点左移,最终使得d点与 p点重合,导致因待播放媒体数据供应不足出现“播放暂停,等待缓冲”的现象[14]。综合考虑以上两种情况,媒体数据的下载速度应该随 p~d区间和d~e区间比值的变化而变化,如公式(1)所示。

其中,speeddownload表示媒体数据下载速度,d-e表示存储新下载数据的预留空间大小,p-d表示存储已下载待播放媒体数据的空间大小,speedplay表示媒体播放速度。由公式(1)可知,当已下载待播放媒体数据较多时,媒体下载速度speeddownload的值将会减小;当 p点与d点距离很近时,speeddownload的值将会很大,表示本地因待播放媒体数据供应不足而采用尽可能的下载方式获取数据;当媒体数据的实际下载速度长期达不到speeddownload的值时,表示客户端应该更换服务端,以改善媒体数据的下载速度。

3 播放流程设计

该嵌入式流媒体播放终端将播放过程中的各个环节划分为不同的功能模块,并使用线程实现,采用模块化线程设计充分利用了Linux多线程、多任务机制[15],保证了系统的灵活性和易升级性,提高了播放器的响应速度和性能,播放器软件流程如图4所示。

图4 播放器软件流程图

图4为播放器软件系统的实现流程图,可划分为以下几个主要阶段:

(1)系统初始化,对系统参数、环境进行相应的设置。

(2)创建会话,主要包括初始化会话描述信息、RTSP客户端标示符、同步线程标示符和显示屏参数等系统变量,如果初始化失败,则系统退出。

(3)初始化数据缓存空间,申请一定大小的内存空间作为数据缓存空间,并初始化其数据结构。

(4)媒体数据获取,根据初始化会话信息判定服务类型,若为服务器播放模式,则建立RTSP会话,创建RTSP客户端,建立与服务器之间的连接,通过RTP/RTCP协议传输流媒体数据;若为P2P播放模式,则创建socket()套接字,建立与指定P2P节点之间的连接,通过UDP协议传输流媒体数据。

(5)流内排序,将乱序到达的网络媒体数据包进行处理,使得播放时媒体流的时基顺序与原始媒体流的顺序一致,同时将已排序的媒体数据与其他节点交互。

(6)解码器解码,解码选择器根据媒体数据头信息选择相应的解码器,对已排序的媒体数据进行解码。

(7)流间同步,将不同媒体流之间的基于时序的对应,即保证对各媒体流(音频、视频)的播放是同步的,与流内同步相比,其过程更加复杂也更为关键。

(8)启动解码播放线程,主要是初始化硬件设备,以保证音视频同步播放。

(9)判断媒体播放是否结束,如果结束则系统退出,否则,继续获取媒体数据。

4 系统测试

系统测试中流媒体服务器采用的是Apple公司提供的开源实时流媒体服务器Darwin Streaming Server(简称DSS),由DSS后台管理系统可实时观测服务器状态,如 CPU Load、Current Throughput、Total Bytes Served等参数状态,通过DSS服务器状态参数的变化来实现对不同实验环境的对比分析。

系统测试分为两部分,首先是不具有P2P功能的嵌入式流媒体播放器的播放测试,本文实验中采用的是开源的MPlayer,通过编译移植到UP-Magic6410开发板上,DSS服务器主机IP地址为192.168.1.100,嵌入式流媒体播放器终端设备IP地址为192.168.1.101/102,分别在播放器地址栏中输入传输协议、服务器IP地址和视频名称rtsp://192.168.1.100/daomeixiong.mp4,观察记录DSS服务器状态参数;然后是本文设计的具有P2P功能的嵌入式流媒体播放器的播放测试,步骤同上。两种不同播放环境下DSS状态参数如图5所示。

图5 DSS服务器状态参数对比图

在图5中,左图为不具有P2P功能的嵌入式流媒体播放时DSS服务器状态参数示意图,右图为具有P2P功能的嵌入式流媒体播放器播放时DSS服务器状态参数示意图。通过对比证明,当采用具有P2P功能的嵌入式流媒体播放器访问DSS服务器时,CPU Load有效降低,整体媒体数据传输量Total Bytes显著减少,媒体下载速率也有一定的提升,且当以具有P2P功能的嵌入式流媒体播放器播放时,其效果图如图6所示。实验结果表明,本文设计模式能够提供稳定、流畅的播放服务,且能够有效降低流媒体服务器负载。

5 结束语

图6 具有P2P功能的嵌入式流媒体播放器播放效果图

本文提出的具有P2P功能的嵌入式流媒体终端设计方案,采用层次化设计方式,对系统功能进行分层,实现上层的软件模块调用下层硬件提供的功能,充分利用了硬件的处理能力,并保证了软件的可升级性。经实验证明,所引入的P2P播放模式,有效减轻了服务器负载,提高了系统的服务能力。

[1]吕伟梅,郑庆华.移动流媒体播放器的设计与实现[J].计算机科学,2008,35(9):126-128.

[2]贺礼,陈前斌.基于3G无线网络实时传输MPEG-4流媒体的设计与实现[J].计算机应用研究,2008,25(6):1856-1859.

[3]李爱群,贺锋.一种嵌入式P2P流媒体播放器的设计[J].信息化研究,2010,36(9):23-27.

[4]文远保,林建明.嵌入式流媒体客户端缓冲控制策略的研究[J].华中科技大学学报:自然科学版,2005,33(10):83-85.

[5]赵宏.视频网格关键技术研究[D].乌鲁木齐:新疆大学,2010.

[6]Bamakhrama M,Stefanov T.Hard-real-time scheduling of data-dependent tasks in embedded streaming applications[C]//EMSOFT’11 Proceedings of the Ninth ACM International Conference of Embedded Software,2011:195-204.

[7]朱鹏,李春文.基于RTP的网络视频传输系统的设计与实现[J].计算机工程与应用,2003,39(26):18-20.

[8]管昌生,邓磊.基于P2P技术的流媒体服务模型研究[J].武汉理工大学学报,2006,28(2):70-73.

[9]金海红,昂志敏.基于CDMA网络的视频实时传输系统[J].仪器仪表学报,2006,27(6):659-661.

[10]Inge H O,Jetunda,Andrew P.RTP-based broadcast streaming of high definition H.264/AVC video:an error robustness evaluation[J].Journal of Zhejiang University:Science A,2006(S1):19-26.

[11]王书芹,姜秀柱.基于P2P的流媒体点播系统中客户端缓存的研究[J].计算机应用与软件,2009,26(9):219-221.

[12]Qiu Xuanjia,Huang Wei,Wu Chuan.Instant Leap:an architecture for fast neighbor discovery in large-scale P2P VoD streaming[J].Multimedia Systems,2010,16(3):183-198.

[13]施博学,王志良,刘冀伟.基于RTP实时远程图像传输研究与实现[J].微计算机信息,2005,21(2):178-179.

[14]谭云福,张建忠.基于MPEG-4的嵌入式流媒体服务器设计[J].计算机工程与设计,2008,29(16):4144-4146.

[15]陈起,吴杰.P2P流媒体点播系统中的缓存管理方案的研究和实现[J].计算机应用与软件,2009,26(2):94-96.

猜你喜欢
解码嵌入式客户端
《解码万吨站》
解码eUCP2.0
NAD C368解码/放大器一体机
Quad(国都)Vena解码/放大器一体机
县级台在突发事件报道中如何应用手机客户端
孵化垂直频道:新闻客户端新策略
基于Vanconnect的智能家居瘦客户端的设计与实现
搭建基于Qt的嵌入式开发平台
嵌入式软PLC在电镀生产流程控制系统中的应用
Altera加入嵌入式视觉联盟