1、初始化 com, 调用CoInitialize(NULL)
2、初始化GraphBuilder, 调用CoCreateInstance。 GraphBuilder是DirectShow中视频的管理类。 非常重要。
3、枚举需要的接口,调用QueryInterface, 常用的有IID_IMediaControl、IID_IVideoWindow等。
4、创建自己需要的Filter(若是播放AVI,则可以略过这一步), 这一步需要分别创建:
分离器: 从磁盘中读取文件,并将视频文件内容分为音频流和视频流。
视频解码器: 将视频流解码为一帧一帧的画面,之后传给视频渲染器。
音频解码器: 将音频流解码为音频设备可播放的形式,之后传给音频播放设备。
视频渲染器: 负责渲染视频画面。
音频渲染器:负责播放声音。
然后,需要将各filter的pin链接起来。形成一个通畅的视频流。之后,输入文件后,DirectShow就会按照事先设定好的线路运转。
5、枚举IID_IFileSourceFilter接口,读取文件。 之后使用MediaControl对视频的播放进行控制。
这个过程需要,预先安装好对应的解码器和分离器。 渲染器系统提供了。 lav filter包含同时分离器和解码器。
我用的是,lav的分离器 lav splitter filter 和 ffdshow的解码器。
同时,如果希望直观的了解这个通路的建立过程,可以使用graphstudionext。
不过,如果希望看到程序的播放通路。需要将graphBuilder加入到ROT(对象活动表)中,具体过程参照MSDN。
参考博客:http://blog.csdn.net/shaqoneal/article/category/1887469
这个博客,详细的介绍了上述的过程。 |