AVS功能的设计与实现
为了提供良好的开放性和可扩展能力,我们选择采用DirectShow架构来开发AVS播放器。
总体架构设计
AVS播放器应能够支持两种形式的媒体播放:本地文件播放和网络流媒体播放。
对于本地文件播放,AVS目前主要存在两种文件封装格式:
1)AVS-P1(AVS第一部分:系统)[3]中所定义的兼容于MPEG2系统的TS流封装格式,文件后缀名为。avs,简称TS流文件。
近年来,随着宽带互联网及其应用的快速发展,越来越多的用户采用P2P等技术通过互联网下载视频文件进行观看,或者直接以流媒体的方式在线收看视频节目。然而,在目前通过互联网广泛传播的音视频媒体内容中,绝大部分采用的依旧是wmv、real、MPEG4、H.264以及flv等编码格式,AVS几乎难觅踪影。究其原因,除了以AVS编码的节目源内容较为匮乏之外,由于目前绝大多数媒体分发工具(如P2P流媒“十一五”国家科技支撑计划项目资助,编号:2006BAH02A10 体软件等)仅关注于从网络的角度来提高媒体分发的效率,在客户端一般采用现成的第三方播放器和解码库来进行媒体播放,因此缺乏合适的AVS播放器也就成为了阻碍AVS被广大互联网用户所熟悉和接纳的一个重要因素。
客户端媒体播放器是将音视频媒体信息最终展现给用户的窗口,是音视频流媒体业务实现中必不可少的一个重要环节。为了推广和普及AVS应用,培育AVS互联网用户群,为客户提供完美的视听觉体验,本文设计并开发了一套基于Windows平台的AVS流媒体播放器,能够全面支持各种文件封装格式和网络传输条件下的AVS媒体播放。
AVS是我国具备自主知识产权的数字音视频编解码标准。除了视频和音频等基础信源编码标准外,AVS中还包括有系统、IP网络传输、文件格式等一系列支撑标准。在提供相同编解码质量的条件下,AVS视频[1]的压缩效率可达到传统MPEG-2标准的2~3倍,与国际上最新的H.264标准基本处于同一水平,而算法的实现复杂度却大为降低。此外,低廉的专利使用费也是AVS能够吸引产业链中各环节用户所关注的一大重要亮点。
开发与运行平台
不同DirectShow插件之间的相互连接和数据传递是通过插件上的插头(pin)来具体实现的,分为输入插头(input pin)和输出插头(output pin)两种类型。上游插件的输出插头与下游插件的输入插头连接在一起。连接的过程实际是一个媒体类型协商的过程,通过比较两个插头上记录的可支持媒体类型,最终确定一个双方都支持的类型,这样就能够保证下游插件可以处理从上游插件接收到的数据。
DirectShow插件以及插件图的管理是由一个更高级别的插件图管理器(Graph Manager)来完成的,它提供对插件图中媒体数据流的各种播放控制和管理。对于插件图的建立,可以在插件图管理器中控制每一个插件的加入,也可以通过智能连接的方式。DirectShow中的智能连接会首先根据文件名或者网络协议名来查询注册表,得到source filter并将其加入插件图。然后再根据插件的输出pin上记载的媒体类型逐个尝试下一个可用的插件。依此类推,当所有插件的输出pin都和其它插件的输入pin建立好连接之后,就完成了插件图的创建过程。
按上述方式开发的AVS播放器由一组DirectShow插件所组成,它提供了一套驱动媒体播放的内核而本身并不带播放界面。在实际运行中不仅可以与任何支持DirectShow的通用播放器外壳程序(例如WindowsMedia Player)配合使用,同时还支持第三方软件开发者在此基础上定制开发自己特色的播放器界面,因此具有很好的开放性、适应性和可扩展性。
DirectShow是微软公司提供的一套基于COM(组件对象模型)编程接口的开放性应用框架,能够为Windows平台上各种多媒体应用系统开发提供完整的解决方案[2]。
基于DirectShow开发的应用系统由一系列独立注册的模块化COM组件所组成,在DirectShow中通常称之为插件(filter)。多媒体数据的处理过程被分成为若干步骤,每一步由一个插件来完成。为了在插件之间传递数据,需要将若干插件相互连接起来,一个的输出作为另一个的输入。以这种方式连接在一起的一组插件称为插件图(Filter Graph)。在插件图中,媒体数据以样本(sample)为单位在插件之间进行传递和处理,从源插件(source filter)经由中间插件最终流动到呈现插件(rendering filter),从而实现媒体播放。对于视频来说一个样本通常对应一帧视频数据。