嵌入式VOD系统客户端缓存机制研究与实现
2015-05-25王冬星许有军
李 娟,王冬星,张 华,孙 涛,许有军
(大庆师范学院 计算机科学与信息技术学院,黑龙江 大庆163712)
0 引言
基于嵌入式技术,综合计算机网络通信技术和QT 编程开发技术,开发了基于嵌入式Linux 的交互式视频点播(Video on Demand,即VOD)系统,该系统作为便携式、可移动终端设备,控制各种音视频媒体的传输、缓存、存储、播放、自动搜索与切换等功能,为用户提供实时、交互、按需点播服务。随着嵌入式软件、微处理器和无线网络的发展,嵌入式VOD 系统在远程教育等领域将得到更加广泛的应用。
点对点(Peer-to-Peer,P2P)结构是流媒体系统目前所采用的主流设计结构[1],考虑无线网络带宽的局限性和存储空间小、客户端资源有限等因素,本文设计的VOD 系统采取经典C/S 模式架构。对S3C2410 ARM 硬件平台和嵌入式ARM-Linux2.4 系统进行了研究、裁剪及优化整合,以满足嵌入式环境对交互性、易用性、稳定性等要求。
1 嵌入式VOD 系统的总体设计
本文搭建的嵌入式Linux 视频点播系统总体架构如图1所示。
图1 总体架构
本系统由FTP 服务器、目录服务器、VOD 客户端和Mplayer 四部分构成,其组成分别介绍如下:
(1)FTP 服务器:主要提供接受与处理客户端请求、视频文件的加载等片源服务,同时进行系统资源管理和用户管理等。本文选择SERVERU 服务器软件,它不仅提供文件下载,还为用户的系统安全提供全面保护,如为FTP 设置密码、设置各种用户级的访问许可等等。
(2)目录服务器:与FTP 服务器同在一台机器上,由本服务器提供影片的主要信息,包括影片名称,演员列表,影片内容介绍,片长大小等,并实现片名和影片实际地址的映射。
(3)VOD 客户端:选择嵌入式设备作为客户端,实现人机交互功能。用户运行客户端程序时,向服务器提交请求并处理从服务器返回的响应信息。采用QTE 图形界面设计,以列表方式显示影片全部信息,并取得各影片的实际存储地址,最后调用Mplayer 播放器播放影片。
(4)播放器(Mplayer):被VOD 客户端调用,以便播放影片。
目前对流媒体服务器的研究已经很多,因此本文主要工作在于客户端软件设计及存储管理功能实现。
2 客户端软件功能模块设计
嵌入式VOD 客户端是整个系统的核心部分。每个客户端都承担着获取资源、下载资源和视频播放的任务。系统由ARM-Linux2.4 内核构成,主要负责进程调度、内存管理、虚拟文件系统、网络接口、进程间通信、各种中断响应、事件响应、系统资源分配等。
为了实现高效的点播资源交换,嵌入式VOD 客户端软件需要四大功能的支持,一是设计客户端用户界面;二是完成网络的访问功能,完成与FTP 视频服务器的连接;三是与视频服务器连接完成后,实现视频播放功能;四是数据存储,不同于直播系统[2]的是,如果没有存储功能,点播系统的共享性和整体性在很大程度上会降低,因为资源交互是在观看同一个资源的同一播放点的节点时进行的。因此采用模块化设计将系统划分为客户端用户界面模块、视频资源访问模块、视频播放模块与数据存储模块四个大模块。VOD 客户端模块划分如图2所示。下文将对各个模块的设计进行具体描述。
图2 VOD 客户端模块
2.1 客户端用户界面模块
本模块的程序主要负责实现与用户的交互,由用户登录,影片列表和影片播放三个界面组成。本文是在Linux 平台上开发,使用QT 制作一个视频点播界面,Qt/Embedded(简称QTE)是一个专门为嵌入式系统设计的图形用户界面工具包,它支持Linux 平台。此界面包含四部分:按钮、文本框、标题栏、列表框。按钮分为两个,一个用来网络IP 的连接,当点击此按钮就会与FTP 服务器连接上获得FTP 目录服务列表;另一个按钮用于退出视频点播界面。Text Label 用于接收用户所输入的FTP 服务器的IP;标题栏说明此界面为视频点播界面;而List Box 用于显示连接FTP 服务器后,目录服务器内容和点击的影片也将在此用Mplayer 播放视频。
2.2 视频资源访问模块
网络视频资源访问模块首先需要在嵌入式设备中进行开发模式的选择,FTP 是C/S 模式,HTTP 可以是B/S 模式。在实际应用中,FTP 服务器,一般需要客户端用QTE 编辑浏览器,这样可以将其延伸为B/S架构,易形成友好的点播界面,同时提供更丰富的网络功能,如资源搜索等。本文采用的是FTP 服务器。
2.3 视频播放模块
在S3C2410 硬件平台上对网卡支持的前提下,有多种开源的媒体播放软件可以选择。基于技术上的成熟度,Mplayer 播放器具有便于嵌入式平台移植以及支持多种流行的音视频编解码方式等优势,经过多次试验,笔者在嵌入式平台上用Mplayer 实现了视频的点播,同时采用QT 来编写播放的点播界面。
2.4 数据存储模块
本模块功能是管理一段内存缓冲区,提供与基本文件操作类似的读取、写入和删除操作的接口。设计此模块目的是在媒体播放过程中,需要一个被全局共享的内存缓冲区,由视频资源访问模块实时接收数据,并将其临时的存储在这段内存缓冲区,同时读取视频数据块并实时播放,为此设计了读取和写入接口。提供删除操作接口是为了节省有限内存存储资源,以便将播放过的视频数据实时的删除。
进行异步读写是数据存储模块在读写磁盘过程中的具体实现途径。一般视频资源的磁盘文件较大,读写过程耗费系统时间,执行同步读写操作会阻塞读写文件的函数进程,而且读写函数直到文件读写结束后才返回到调用处,严重影响了程序执行效率。而进行异步读写操作时,即使磁盘读写操作没有结束,读写操作转入后台进行。在后台执行结束后,回调函数通知应用程序读写结束,异步读写以应答方式与系统通信,可以显著地提高整个系统的效率。
3 客户端缓存机制和算法简析
VOD 在视频数据传输过程中存在大码率、传输时间长等特点,使得VOD 对服务器的带宽以及响应延迟的要求都很高。应用数据缓存技术,可以减少磁盘读写次数,降低数据请求响应延迟,提高服务器并发处理能力。本文通过对数据分块、顺序预取、缓存替换等策略来提高缓存数据块的命中率[3]。
3.1 基于数据块读写队列的视频缓存算法
视频缓存以传统网络缓存为基础,传统网络缓存算法[4]有基于最近最少使用的缓存算法、基于访问频率的缓存算法、访问频率与最近最少使用的缓存算法等,在PC 机的VOD 系统上得到广泛应用。目前,切分算法是一种较为新颖的处理视频文件过大的方式。基于切片的视频点播算法主要思想是针对视频数据传输量大的特性,选择不同的切分规则,将视频数据切分成不同片段,应用不同机制来对文件进行缓存的方法,使缓存空间有效利用。
本文对有嵌入式设备需求的用户点播特点和点播的流程进行分析,改进了基于切片的视频点播算法,提出了一种基于数据块读写队列的数据缓存算法,这种缓存机制的主要思想类似于CPU 指令队列的缓存策略[5]。该算法将服务器传输的流媒体影片文件信息流均匀固定切块(Fixed segment ),将视频数据流均匀分成n 个数据块,当有用户t 时间段访问视频时,将首个数据块先传递给用户,若用户选择播放,则从服务器将视频流分块传递给客户端,采用队列机制,在此排队等候,当用户客户端没有足够的缓存空间缓存当前视频流数据块时,采用内存-缓存和磁盘-缓存相结合,借助SDRAM、LCD 缓存和辅存SD 卡等存储介质,在客户端预留至少1G 的空闲存储区,对资源信息进行二级缓存,以降低服务器负载,减少传输延迟。并且采用异步读写方式,以提高系统的效率。这种方式适用于嵌入式设备,其移动便携、操作简便,但其硬件资源有限,难以获得更为精确的用户点播规律,该算法只有通过降低算法复杂度实现。
3.1.1 数据块写入队列算法流程
对数据块的写入操作包括两部分,一是将请求到达的点播资源分块写入缓冲区或者存储到本地磁盘,二是对相邻数据块的请求进行回应,视频数据分数据块写入队列的操作流图如图3所示。
图3 数据块写入队列操作流图
3.1.2 数据块读出队列算法流程
数据存储模块中,当有本地资源被提出请求的时候,数据块的读出队列操作流图如图4所示。
3.2 缓存算法的应用
通过集成的LCD 控制器,ARM 处理器可以利用SDRAM 控制器,使显示缓冲和系统共享RAM,从而能够直接读/写显示缓冲。这样做能有效地节省显示缓存并且不用添加额外的显示缓存控制器,节约成本,但是会占用一部分系统总线带宽。每当开启LCD 控制器的扫描,系统总线就要分出一部分带宽来满足对LCD 的不间断扫描。这种方法对系统总线的占用情况与LCD 的大小和类型有关。
实际操作中,用户只需要将要显示的数据块,按特定的格式写入显示缓存,屏幕就会显示相应图像。在软件设计中,只要准确得到这个显示缓存的地址,对它进行相应的操作即可。Linux 的帧缓冲(Framebuffer)设备驱动程序是专为显示设备提供的。笔者在本系统中,通过修改调试这个程序验证数据块读写队列的缓存算法的有效性,经过反复多次测试,达到了理论的预期效果。
图4 数据块读出操作流图
4 系统运行调试
系统启动后,在开发板上的LCD 显示屏上可见VOD 客户端界面,如图5所示。输入FTP 地址后,点击链接按钮,可链接到FTP 服务器上;当屏幕上出现视频资源,选择观看的视频,点击播放按钮,在LCD 屏上即可播放视频,如图6所示。
图5 VOD 客户端视频播放前
图6 VOD 客户端视频播放后
5 结语
实验结果表明,以数据块为粒度研究的数据缓存机制,有效地避免了点播过程中造成的点播延迟。依据用户的点播行为进行分块缓存,对提高点播系统的交互性能是十分必要的,对VOD 系统技术具有很重要的实际意义。在今后的工作中,为提高VOD 系统的整体性能,还需要对影片在磁盘上的分布策略和优化调度算法做进一步的研究。
[1]李裕.基于手持设备移动流媒体播放器的设计与实现[D].南京:南京邮电大学硕士学位论文,2011:28-33.
[2]闻婷婷.P2P 点播系统存储管理研究与实现[D].武汉:华中科技大学硕士学位论文,2011:13-23.
[3]苏杭,王劲林.VoD 系统的数据缓存策略研究[J].微计算机应用,2009;30(11):34-37.
[4]周程.视频点播系统缓存算法研究[D].杭州:浙江大学硕士学位论文,2011:7-13.
[5]胡玉琦.视频点播系统中代理缓存及流调度技术研究[D].沈阳:东北大学博士学位论文,2005:24-30.