DirectShow 播放mp4编码 视频

论坛 期权论坛 脚本     
匿名网站用户   2020-12-19 15:49   11   0

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

这个博客,详细的介绍了上述的过程。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1136255
帖子:227251
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP