5.2 解复用Filter
解复用Filter是整个Filter链路的核心部分。它的功能是分析传输流的PSI,建立完整的PDI映射关系;然后从传输流中分离出每路节目的视频和音频数据,将它们送往相应的视频和音频解码器,同时接收应用程序的控制信息。解复用Filter对每一个传输流包的处理过程如图4所示。
图4
5.3 解决链路死锁问题
Filter链路通常需要一个传输线程。在推模式下,传输线程通常由Source Filter创建,数据被线程推向解复用Filter,经处理生成的视频和音频数据被送往解码器,最后在终端上播放出来。整个过程都在单线程内完成。
在多路输出情况下,一般的推模式单线程模型将会导致链路死锁。解决死锁问题的关键是为每一路视频或音频输出创建专门的传输线程,并且线程的创建应该在解复用Filter内完成而不是在Source Filter内(因为Source Filter只有一个传输流输出)。
在DirectShow SDK中,可以通过使用COutputQueue对象来实现多线程传输,最终解决死锁问题。方法是在解复用Filter中声明一个COutputQueue对象,在每次启动传输时调用COutputQueue的Receive(IMediaSample* pSample)函数。此时对象会自动生成一个传输线程,并将其加入到自身的线程队列中,当线程完成时将其从队列中清除。
5.3 Video Mixing Renderer9
Video Mixing Renderer9(VMR9)是DirectX9新添加的组件。它使用了Direct3D9技术,充分利用了显卡专有的图形处理能力,并且在做视频的合成和显示时不占用系统CPU资源。使用VMR9可以高效的完成多路视频的播放。如果使用传统的Video Render Filter,在多视频显示条件下,必须为链路添加多个Render Filter。而VMR9最多接收十六个视频输入,在多路播放时可以将每一路视频设置在窗口的不同区域来显示,还能够实现多个视频或图片的叠加,例如在节目中加入动态字幕或台标。
6 实验结果
PC机配置
l 操作系统:Windows2000 Professional
l CPU:P4 2.4GHz
l 内存1G Byte
l 显卡:主板集成,显存128M Byte
信号参数:
l 卫星参数:泛美8号,166°E
l 极化方式:垂直
l 下行频率:3836MHz
l 符码率:22000波特
l 节目提供商:TVBS
l 频道数目:9(加密频道数目6,非加密频道数目3)
图5是显示界面,图中正在播放三路非加密节目。
图5
7 结束语
本文作者的创新点:使用DirectShow技术,结合通用接收机,解决了数字卫星接收单监视器系统无法播放多路节目的问题,降低了硬件成本,对于非专业条件下的多媒体节目的播放(监控)和素材的收集具有实用价值。另一方面,使用DirectShow还可以实现其它的功能,例如使用DES(DirectShow Editing Services)可以实现对多媒体文件的非线性编辑等。理论上还可以将本文的设计应用在网络环境中:网络客户端可以通过PSI信息,选择播放或录制感兴趣的电视节目从而实现网络视频点播功能。
参考文献
1、 ISO/IEC 13818-1(MPEG-2 System),ISO/IEC 13818-2(MPEG-2 Video),ISO/IEC 13818-3(MPEG-2 Audio)
2、 Microsoft, DirectX 9.0 Programmer's Reference,2002。
3、 陆其明,DirectShow开发指南,清华大学出版社,2003
4、 史京玲,刘旺开,白涛.VC环境下监控软件流程图界面的开发.微计算机信息,2004年20卷第4期