基于DirectShow的可控视野视频点播系统的设计与实现
视频点播(Video on Demand,VOD)是利用视频服务器存储的视频节目和其他多媒体信息,通过传输网络和用户前端设备(如机顶盒)向用户提供交互式的视频服务。
1 引 言
用户能够通过计算机或相应的用户前端设备,对服务器提供的视频节目进行编辑与处理,如暂停、快/慢进、搜索等等。VOD还可以实现上网、家庭购物、旅游指南、订票预约、股票交易等其他功能。
但是,目前的视频点播功能具有一定的局限性。播放的节目都是由电视台决定的,尤其是在比赛的转播中,电视台播放哪些画面、镜头,观众只能被动地接受,无法选择。而可控视野的视频点播是利用摄像机组将现场各方位的画面都拍摄下来,然后利用视频融合技术进行处理,供用户进行点播。这样,用户就可以自由地左看、右看了。
2 DirectShow技术
DirectShow是建立在DirectDraw和DirectSound组件基础上的流媒体处理的开发包,他通过DirectDraw对显卡进行控制以显示视频,通过DirectSound对声卡进行控制以播放声音。
过滤器是DirectShow最基本的组成元件。过滤器是一个COM组件,是完成DirectShow处理过程的基本单元。
过滤器主要分为以下几种类型:
(1) 源过滤器(source filter)
源过滤器引人数据到过滤器图表中,数据来源可以是文件、网络等。不同的源过滤器处理不同类型的数据源。 (2) 变换过滤器(transform filter)
变换过滤器的工作是获取输人流,处理数据,并生成输出流。变换过滤器对数据的处理包括编解码、格式转换、压缩解压缩等。
(3) 渲染过滤器(renderer filter)
渲染过滤器在过滤器图表里处于最后一级,他们接收数据并把数据提交给外设进行渲染。
在DirectShow里,一组过滤器称为一个过滤器图表(filter graph)。过滤器图表用来连接过滤器以控制媒体流,也可以将数据返回给应用程序,并搜索所支持的过滤器。过滤器有3种可能的状态:运行、停止和暂停。暂停是一种中间状态,停止状态到运行状态必定经过暂停状态。暂停可以理解为数据就绪状态,是为了快速切换到运行状态而设计的。在暂停状态下,数据线程是启动的,但被渲染过滤器阻塞了。通常情况下,过滤器图表中所有过滤器的状态是一致的。 3 系统设计
本系统采用客户端/服务器(C/S)结构。其中,客户端提供与用户交互的界面,实现点播功能;服务器端实现视频节目的存储管理,用户信息管理和用户点播请求的响应功能。
3.1 客户端概要设计
客户端主要采用C#技术编程实现友好的视频点播界面。此外,由于现有的视频播放器,如Windows MediaPlayer无法收看可控视野的视频节目,所以采用Direct-Show技术自行开发设计一个播放器。
3.2 服务器端概要设计
服务器端分为Web服务器和视频服务器两个部分。他们可以在同一个机器上,也可分布在不同的机器上。随着应用规模的不断扩大,可以灵活的增加服务器来提高视频服务器的资源带宽。
服务器端的主要模块有:
身份验证模块 对用户的身份进行验证。
数据库管理模块 负责有关用户身份验证的查询和维护,播放管理模块对媒体流内容存储路径的查询和维护,完成从逻辑节目到文件物理存储的映射。
播放管理模块 负责点播服务的播放响虚功能。 4 系统实现中的关键技术
系统客户端播放器需要接收从服务器端传送过来的多路视频流,并将其分别解码、同步,然后合成播放。其中解码使用微软DirectShow现有的过滤器,同步和混合渲染都需要重写DirectShow中的VMR(Video Mixing Renderer)组件来实现。VMR,即视频混合渲染器,也是Dj-rectShow的一个渲染过滤器,可以同时呈现多路视频流,最多支持16路输入流的α混合。
4.1 VMR简介
VMR位于视频流最后的筛选器图形中。根据具体的配置不同,由2~5个独立功能的组件构成(不包括输入引脚)。VMR包括混合器(Mixer)、图像合成器(Composi-tor)、分配演示器(Allocator Presenter)、核心同步控制器(Core Synchronization Unit)和窗口管理器(Window Man-ager),其结构如图1所示。
![]() |
(1) 混合器
当有多路输入流时VMR将加载该COM对象。混合器负责收集每路输入流的信息,并将他们进行Z排序;混合器还决定什么时候每个输入引脚接受输入样本,同时,还要在恰当的时间通知图像合成器执行实际的混合;混合器也计算每个输出图像的时间戳;当应用程序提供一幅位图用于显示在合成后的图像的最上层时,即使输入流的Z顺序发生了改变,混合器也必须保证位图处于最上面。
(2) 图像合成器
该COM对象执行实际的混合,将多路输入流合成到一个单一的DirectDraw表面,DirectDraw表面由分配演示器提供。VMR提供一个缺省的图像合成器供应用程序进行二维的a混合。应用程序可以提供一个自定义的图像合成器实现别的二维或者三维效果,如给部分图象应用纹理、每个像素进行a混合。
(3) 分配演示器
这同样是个COM对象,给图像合成器分配Direct-Draw表面,同时负责与图形卡打交道。应用程序可以自己实现分配演示器从而控制DirectDraw物体,或者在视频呈现的时候访问位信息。
(4) 核心同步控制器
保证每一帧都能在正确的时间呈现出来。核心同步控制器使用过滤器图表管理器提供的IReferenceClock接口,并且执行质量控制和帧报告函数。
(5) 窗口管理器
只有当VMR工作在窗口(Windowed)模式下时才使用。 VMR的这种组件式结构使应用程序可以根据需要以不同的方式操作他,VMR支持3种不同的操作模式:有窗口(Windowed)、无窗口(Windowless)和无呈现(render-less);两种混合模式:单一流(single stream)和多个流(multiple streams)。有窗口模式是默认模式,VMR会创建一个单独的窗口,并将视频呈现到该窗口上;无窗口模式通过将视频直接呈现到应用程序窗口上,为应用程序提供了更强的控制能力;而无呈现模式使用程序自定义的分配演示器对象。
可控视野点播系统需要播放多路视频流,所以采用无窗口模式。要注意的是,VMR必须被加入到过滤器图表中,并且必须保证在他连接其他过滤器之前已经全部配置完毕。在VMR被初始化之后,程序必须在所有的连接启动之前指定VMR将要接收的视频流的数目。
4.2 VMR的渲染原理
VMR同时接收两路视频信号,并把他们同时播放出来。图2中VMR有默认的4个输入引脚,如果需要播放超过4路视频流,可以在程序中设定输入视频流的数目。可控视野点播系统的渲染原理与图2相似,只是视频源不是文件,而是通过网络传输过来的实时视频流。
4.3 相关代码
(1) 配置VMR
首先创建VMR过滤器并查询IVMRFilterConfig接口,通过IVMRFilterConfig接口设置无窗口模式。其主要的代码如下:
|
|
本文介绍了利用DirectShow中的VMR组件设计的可控视野的视频点播系统。该系统可以同时播放多路视频,让观众可以通过鼠标与场景进行交互,实现左视、右视、近看、远观等操作,令观众有亲临现场的感觉,满足观众个性化的需求。
本文来源:现代电子技 作者:北京工业大学 王艺娜 王广生
关于 DirectShow 可控视野 视频点播系统 设计与实现 的相关解决方案
- 2007-06-13基于DirectShow的可控视野视频点播系统的设计与实现




