c++ DirectShow播放任意格式的视频
来源:互联网 发布:软件行为分析 编辑:程序博客网 时间:2024/05/20 08:26
利用opencv只能处理.avi的视频,opencv之前的版本之前试过好像是只能处理.avi未压缩版本的视频,未压缩过的视频相当大,一个文件大概是几十个G。(这个不确定,因为之前用的压缩过的.avi的格式的cvCreateFileCapture时会出错)
后来利用opencv的新版本可以处理H.264/mpeg4等压缩格式的.avi文件,但是还是不能处理像现在很广泛应用的flv等格式,当然可以用ffmpeg来处理,可以参考楼主博客:
http://blog.csdn.net/kuaile123/article/details/11188975
http://blog.csdn.net/kuaile123/article/details/11367309
http://blog.csdn.net/kuaile123/article/details/11378925
如果图简单点可以播放其他格式的视频,windows下可以直接用DirectShow。
DirectShow是微软公司在ActiveMovie和Video for Windows的基础上推出的新一代基于COM(Component Object Model)的流媒体处理的开发包。DirectShow使用一种叫Filter Graph的模型来管理整个数据流的处理过程。它广泛地支持各种媒体格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等,为多媒体流的捕捉和回放提供了强有力的支持。
DirectShow所需要的库都在微软C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Include
直接用vs,不需要配置库文件路径,直接在工程中:
#include <DShow.h>
#include <atlbase.h>
#pragma comment(lib, "strmbasd.lib")
如果找不到strmbasd.lib可以去下载 http://download.csdn.net/detail/kuaile123/6233243
如果提示.h文件找不到,就需要自己安装directshow。http://www.microsoft.com/en-us/download/details.aspx?id=8442
不多说了,代码也很简单,只是能播放视频而已。
#include "stdafx.h"#include <DShow.h>//#include "qedit.h"#include <atlbase.h>#pragma comment(lib, "strmbasd.lib")#define SAFE_RELEASE(filter) { if(NULL != filter) { filter->Release(); filter = NULL; } }void main(){IGraphBuilder*pGraphBuilder = NULL;//Filter graph管理器IMediaControl*pMediaControl = NULL;//控制视频/音频的播放、暂停与停止IMediaEvent*pMediaEvent = NULL;//捕获播放过程中的事件CoInitializeEx(NULL, COINIT_APARTMENTTHREADED);HRESULT hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraphBuilder);if(FAILED(hr)) { printf("CoCreateInstance Failed!\n"); goto __exit; }hr = pGraphBuilder->QueryInterface(IID_IMediaControl, (void **)&pMediaControl);if(FAILED(hr)) { printf("Query Media Control Interface Failed!\n"); goto __exit; }hr = pGraphBuilder->QueryInterface(IID_IMediaEvent, (void **)&pMediaEvent);if(FAILED(hr)) { printf("Query Media Event Interface Failed!\n"); goto __exit; } //让directshow自动根据要播放的文件的格式,生成filter graphhr = pGraphBuilder->RenderFile(L"F:\\爱在春天 TV版 47.flv", NULL); //自行修改待播放的视频文件if(FAILED(hr)) { printf("RenderFile Failed!\n"); goto __exit; }hr = pMediaControl->Run();if(FAILED(hr)) { printf("Run Failed!\n"); goto __exit; }long code = 0;hr = pMediaEvent->WaitForCompletion(INFINITE, &code); //等待视频播放完毕if(FAILED(hr)) { printf("WaitForCompletion Failed!\n"); goto __exit; }__exit:SAFE_RELEASE(pMediaEvent);SAFE_RELEASE(pMediaControl);SAFE_RELEASE(pGraphBuilder);CoUninitialize();system("pause");}
- c++ DirectShow播放任意格式的视频
- 基于DirectShow的MFC视频播放器
- DirectShow播放视频
- DirectShow 播放视频
- DirectShow播放视频流程
- 在网页上实现任意格式的音视频快速播放功能的开发总结。
- vs2010环境下mfc+ffmpeg+opencv读取任意格式视频的播放器
- windows ce directshow播放视频
- directshow获取视频播放消息
- DirectShow 播放mp4编码 视频
- DirectShow 播放mp4编码 视频
- 最简单的基于DirectShow的示例:视频播放器
- 最简单的基于 DirectShow 的视频播放器
- 转:最简单的基于 DirectShow 的视频播放器
- 最简单的基于DirectShow的示例:视频播放器
- 利用DirectShow开发C#版的视频播放器
- 我的第一个DirectShow程序,播放一段视频
- C#使用DirectShow实现简单的视频播放
- 浏览器兼容性经典问题(二) IE6 3像素bug问题
- VMware Workstation虚拟机安装
- Win7任务栏的资源管理器指向
- 同步和异步有何异同
- 《Effective C++》 读书笔记(一) 让自己习惯C++
- c++ DirectShow播放任意格式的视频
- 外键和锁
- 多线程的几种实现方法?同步的几种实现方法?
- Android Goldfish内核编译 + eCryptfs文件加解密系统的内核模块配置
- 数组统计分析的另一种方法
- glShadeModel
- 将文件按照行数以及顺序拆分成多个文件
- socket阻塞与非阻塞,同步与异步、I/O模型
- oracle hr样例数据库用户建立