引言
交互式网络电视(IPTV)的兴起,可以为观看者提供一种新的方式来选择与控制他们的播放内容,国内外运营服务商纷纷投资建设自己的IPTV运营平台。随着Web2 o的兴起,新型的视频内容服务商打破了IPTV内容提供者与内容使用者之间的界限,使得视频内容得以爆发式地增长。诸如YouTube、优酷以及类似的网站,越来越多地冲击着传统电视媒体。这些视频网站的高度流行,使更多的人开始关注互联网视频,视频内容也得到了极大的丰富。
观看者不仅希望能够接收优质的IPTV的内容,更希望能够如同普通电视一股方便地观看。IPv6网络的发展使得带宽越来越充足,嵌入式技术的发展则为方便地观看这些内容提供了基础。本文就是基于这样的现实,设计了一种通过家用机顶盒播放互联网视频的应用架构,解决播放这些互联网视频必须通过电脑的问题,使得观看这些视频内容变得简单易用。
技术原理
典型的互联网视频网站包括几个基本的组成部分:视频介绍、视频分类、视频本身——通常是flv文件格式及相关视频。我们在通过浏览器或者专用软件播放选定的视频之前,首先要通过关键字搜索或者分类搜索的方式找到对应视频,然后才能播放。大多数的视频网站都采用流媒体播放方式,可以让我们边边播放,少数需要后才能播放。我们设计的嵌入式应用架构包括如下几个功能组成部分:
·通过网络检索并视频内容;
·设定过滤器分类检索视频内容;
·可以对后的视频海报进行
幻灯式播放:
·对伽视频文件的编解码、音视频编码及音画同步:
·友好化用户播放界面。
这套架构的基本应用结构如图1所示。
应用架构的组成与实现
硬件系统的组成
流媒体编解码单元是整个系统的部分,主要由嵌入式系统、嵌入式CPU及外围部件组成。嵌入式CPU采用三星公司的S3C2440,400MHz主频,内部集成了ARM920T微处理器和常用夕卜围组件、64M SDRAM及256MFLASH。通过S3C2440的GPIO与以太网控制器芯片DM9000的连接,扩展了网络接口,并接人互联网,单元结构参见图2。
嵌入式操作系统采用的是Linux,有如下特点:开放的源代码,内核小,执行效率高,对IPv6的良好支持; Linux的高度模块化使组件更容易加载和卸载; 内置网络支持,容易实现内置的Web服务器等;支持多种硬件平台;提供完整的开发工具和SDK(Software Development Kit),提供图形化的定制和配置工具。
软件设计与实现
嵌入式网络视频点播处理时,需要进行实时的图像处理、音视频解码与同步、网络传输、图形用户界面四部分协同处理。为了确倮软件开发、集成乃至测试时不至于过分复杂,我们对这四部分进行分层处理。从功能的角度来看,整个软件架构包括四个部分:
·网络功能库;
·流媒体处理库;
·音视频解码库;
·用户界面库。
架构接口参见图3。
网络功能库
网络功能库在标准IPv6协议的基础上设计了用于通过互联网处理查询/检索音视频内容,同时负责实时流媒体内容的应用协议。图4描述了网络功能库的处理过程:
①通过NETLIB_handlerlnit()创建NETLIB_Handler实例,完成初始化工作;②通过NETLIB_search()或NETLIB searchBylndex()进行查询;③检索的结果由Handler处理,亦可重新搜索;④NETLIB readContent ( )或NETLIB ̄getCount()可以从handler倮存的检索信息中读取指定内容;⑤检索完毕可通过NETLIB_handl erDestroy销除缓存中的结果集。
下面介绍网络功能库主要功能函数说明,包括下面几个API。
int NETLIB_search(NETLIB_Handler handler, char* keyword,NETLIB_QueryType queryType,unsigned int maxCount)。描述:搜索给定关键字的视频,并返回不超过maxCount指定数量的结果。
int NET LIB_readContent(NETLIB_Handler handler,int index,NETLIB VideoDetail*videoDetail)。摘述:从检索结果中根据指定的顺序(index)读取相应的内容。
流媒体处理库
流媒体处理库负责处理流媒体数据,它的功能包括:①从实时媒体流中分解音视频;②选定音视频解码库对分解的音视频进行解码;③对解码后的音视频进行同步渲染,确保播放效果。处理流程参见图5。
音视频解码库
一个功能完善的FLv播放器必然包括以下三大功能模块。
(1)标签解析模
块:能够按照Adobe公司制定的文档格式规范对Fly文档凵(结构类似swf文件)进行解析。
(2)影片执行模块:能够按照一定的时间顺序执行影片。
(3)ActionScript解析引擎:能够响应用户的交互行为并更好地控制Fly文档的行为。
考虑到使用机顶盒播放flv视频时操作交互类flv文档时的非便利性,故此我们当前实现版本中主要解决了播放时必须的问题,主要功能接口描述如下。
FLVDEC_create(Engine_Handlehandle,string name);用于创建FLV解码器实例。
FLVDEC_control(FLVDEC_Handle, FLVDEC_Cmd id,FLVDEC ̄DynamicParams* params,FLVDEC_Status*status);用于在∏V解码器实例中实现FLV播放控制。
FLVDEC_process(FLVDEC_Handle handle,XDM_BufDesc* inBufs,XDM BufDesc* outBufs,FLVDEC InArgs* inArgs,FLVDEC_OutArgs*outArgs);在FLV解码器实例中实现FLV播放。
FLVDEC delete(FLVDEC_Handle handle);用于删除FLV;解码器实例。
用户界面库
用户界面库基于DirectFB。DirectFB是专门为满足嵌入式设备要求而开发的小巧、强大、灵活和易于使用的图形系统,并且试图成为一个建构于Linux Framebuffer Device之上的新图形标准。它在FrameBuffer的基础上提供了图形加速、输入设备处理提取、透明窗口和多重显示层的功能,能够对嵌入式系统GUI有较好的支持。与那些通用的嵌人式GUI系统相比,它具有非常简洁、高效的体系结构和硬件图形加速功能。
运行效果
在测试用的ΛRM2440板子上播放流畅,截图参见图6。
图6 运行效果图
结论
本文设计并初步实现了IPv6环境下嵌入式互联网视频点播应用架构。在有限资源系统开发中,使用软件系统工程的思想,用分层结构假设开发架构,在实验环境中测试播放较为顺畅。生产环境中,采用具备更好DSP性能的辅助CPU,配合本文的ARM芯片实现本架构,可以更为丌页畅地播放网络视频,进一步提高系统的性能。
[1]. S3C2440 datasheet https://www.dzsc.com/datasheet/S3C2440_589562.html.
[2]. ARM920T datasheet https://www.dzsc.com/datasheet/ARM920T_139814.html.
[3]. DM9000 datasheet https://www.dzsc.com/datasheet/DM9000_979498.html.
免责声明: 凡注明来源本网的所有作品,均为本网合法拥有版权或有权使用的作品,欢迎转载,注明出处。非本网作品均来自互联网,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。