这是很久以前的东西了,那些地方不准确的还请见谅
DVD程序的开发
本节介绍一种编写桌面DVD解码应用程序的简单方法。描述了用C++创建 DVD应用程序的主要步骤。
1、DVD程序基本概念
当编写一个DVD程序时,开发者不仅需要提供用户界面代码还需要调用微软DirectShow应用程序接口来控制DVD回放和导航命令。此方法涉及调用组件对象模型和DVDGraphBuilder对象的CoCreateInstance方法,DVDGraphBuilder将实现创建DVD过滤图形,当创建过滤图形后,将会获得指向接口IDVDControl2和IDVDInfo2的指针,有了接口指针,就可以连接你的用户界面到DVD的导航命令,如播放,暂停等。此处理非常简单和创建别的DirectShow应用程序十分相似。如果读者如果对DirectShow不清楚,可以参阅DirectX8.0开发文档。
2、配置DVD的过滤图形
通常,应用程序开发者不需要关心DVD过滤图形的细节,因为它是自动被创建的。但如果需要建立个人过滤可参阅DirectX8.0参考,这里不作详尽描述。下图解显示了典型的DVD过滤图形。
DVD导航者是DVD回放过滤图形的第一个过滤者,主要处理以下一些任务:
· 从碟片读取导航信息和视频数据。
· 把视频与音频分离,把子图数据分离到单独的数据流中。
· 将提取的流数据应用到图表以供将来处理和最终的渲染。
· 通知DVD应用程序的相关事件。
在音频流中,DVD导航者连接到底层音频解码,而音频解码连接到默认DirectShow过滤设备的默认音频处理。在视频和子图流中,底层过滤是第三方视频解码、Overlay Mixer和视频渲染。如果应用程序处理line21解码过滤关闭标题数据,就必须增加DirectShow line21 解码过滤到相应的图形,这包括单一方法调用,过滤器将会自动连接视频解码和Overlay Mixer。
应用程序通过定制DVD导航中IDVDControl2的“set”成员函数和IDVDInfo2中的“get”成员函数来通讯和控制DVD导航。过滤图形管理必需通过IMediaControl接口来控制停止、播放等其它图形控制。开发者可能会需要控制其它的单独过滤,例如Overlay Mixer过滤在窗口与全屏间切换,可以参阅IMixerPinConfig2