[DirectShow] 播放一个源视频 [大三TJB_708]
2013-05-15 12:52
197 查看
用GetFileName函数获取源视频之后对视频做什么处理呢。本着最简单和最直接的原则,那就把打开的视频原样播放一下吧。怎么样才能播放一个源视频呢,将其步骤记录到此篇笔记中。
当然,修改这个地方还需要修改一下函数的返回值类型,不再是VOID类型的了,返回值应改为BSTR类型。
(1)创建FilterGraph Manager对象g_graph <数据类型:IGraphBuilder>。
(2)用FilterGraph Manager对象g_graph获取指向IMediaContorl接口的指针g_mediaControl <数据类型:IMediaControl>。
(3)用g_graph->RenderFilec创建一个播放视频的filter Graph。
(4)用g_mediaControl->Run接口内函数播放视频。
想办法在vs2010中MFC或者Win32中运行这段程序就可以打开一个源视频并且播放视频了,具体允许的视频格式恐怕还得自己设置。这段程序支持***I格式的视频。SysFreeString(path)表示释放掉保存源视频信息的那块内存,免得内存泄露。
DirectShow播放一个源视频图
此次笔记记录完毕。
1 用GetMoivePath函数返回源视频路径
GetMoivePath函数的编写在(GetMoivePath函数源码)中,源于微软的vmr9allocator示例。此处修改一下GetMoivePath函数代码用于返回源视频的路径,当用GetFileName函数执行成功之后,就将视频路径、文件名存入内存中并返回此段内存的地址。修改代码如下:if (GetOpenFileName (&ofn)){ return SysAllocString( szBuffer ); }
当然,修改这个地方还需要修改一下函数的返回值类型,不再是VOID类型的了,返回值应改为BSTR类型。
2 播放一个源视频步骤和代码
2.1 播放一个源视频步骤
(0) 打开源视频文件,即可通过GetMoivePath函数获取源视频。(1)创建FilterGraph Manager对象g_graph <数据类型:IGraphBuilder>。
(2)用FilterGraph Manager对象g_graph获取指向IMediaContorl接口的指针g_mediaControl <数据类型:IMediaControl>。
(3)用g_graph->RenderFilec创建一个播放视频的filter Graph。
(4)用g_mediaControl->Run接口内函数播放视频。
2.2 播放一个源视频源代码
void PlayStrVedio() { BSTR path = GetMoviePath(); if( ! path ) { return E_FAIL; } HRESULT hr; //创建Filter Graph Manager 对象 hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void**)&g_graph); if (SUCCEEDED(hr)) { hr = g_graph->QueryInterface(IID_IMediaControl, reinterpret_cast<void**>(&g_mediaControl)); } if (SUCCEEDED(hr)) { //创建一个播放视频的filter Graph hr = g_graph->RenderFile( path, NULL ); } if (SUCCEEDED(hr)) { //播放视频 hr = g_mediaControl->Run(); } //释放BSTR类型数据变量,即视频变量的内存段 SysFreeString(path); }
想办法在vs2010中MFC或者Win32中运行这段程序就可以打开一个源视频并且播放视频了,具体允许的视频格式恐怕还得自己设置。这段程序支持***I格式的视频。SysFreeString(path)表示释放掉保存源视频信息的那块内存,免得内存泄露。
3 运行结果
运行此段程序,载入视频就可以播放视频了,不过有一个现象是这样子的,不管是用qq截图还是用截屏方式截图都是黑窗口,截图不到视频窗口的视频图像。我用用手机拍照了一张。播放视频为电影《Life of Pi》,电影讲述的是一个少年和一只老虎在大海中的故事,还不错,除了英语口音难被听懂之外。^-^DirectShow播放一个源视频图
此次笔记记录完毕。
相关文章推荐
- Directshow学习笔记五-----一个简单的视频播放程序(个人学习总结,仅供参考)
- MFC DirectShow视频预览 [大三TJB_708]
- UIWebView中视频播放屏幕自动旋转,app不支持旋转但是某一个页面需要旋转等
- C#使用DirectShow播放视频文件
- 如何使用DirectShow播放一个文件
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——2.2 使用GLSurfaceView和MediaPlayer播放一个平面视频(中)
- wince下用DirectShow播放音频和视频
- DirectShow之接口实战篇--视频抓图与播放控制
- C#使用DirectShow播放视频文件 [转]
- 【转】nginx,lighttpd搭建一个Flv视频播放服务器
- 同一个页面多个视频,同时有且只能播放一视频
- 利用MediaPlayer 获取一个音频或者视频文件的播放时长
- 创建一个程序读入和显示视频文件,并可以使用滑动条控制视频文件的播放。一个滑动条用来控制视频播放位置,以10为步长跳进。另一个滑动条用来控制停止/播放
- 一个视频播放列表demo,视频播放使用的ijkplayer,正在播放视频拖动到不可见区域小窗口播放,可全屏切换
- SPCAMLEditor使用系列(1)--利用SPCAMLEditor,10分钟打造一个在线视频播放库
- iOS开发网络篇—实现一个视频播放客户端小应用(一)
- [OpenGL]从零开始写一个Android平台下的全景视频播放器——2.3 使用GLSurfaceView和MediaPlayer播放一个平面视频(下)
- vs2010 DirectShow(windows sdk v7.1)配置 [大三TJB_708]
- DirectShow 制作在Unity3D中可以设置进度的视频播放插件
- 用DS播放一个视频时,如何通过编程知道GRAPH加载的FILTER的组件所在的路径??