c++ DirectShow播放任意格式的视频
2013-09-08 16:29
260 查看
利用opencv只能处理.avi的视频,opencv之前的版本之前试过好像是只能处理.avi未压缩版本的视频,未压缩过的视频相当大,一个文件大概是几十个G。(这个不确定,因为之前用的压缩过的.avi的格式的cvCreateFileCapture时会出错)
后来利用opencv的新版本可以处理H.264/mpeg4等压缩格式的.avi文件,但是还是不能处理像现在很广泛应用的flv等格式,当然可以用ffmpeg来处理,可以参考楼主博客:
/article/7797298.html
/article/7797299.html
/article/7797300.html
如果图简单点可以播放其他格式的视频,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
不多说了,代码也很简单,只是能播放视频而已。
后来利用opencv的新版本可以处理H.264/mpeg4等压缩格式的.avi文件,但是还是不能处理像现在很广泛应用的flv等格式,当然可以用ffmpeg来处理,可以参考楼主博客:
/article/7797298.html
/article/7797299.html
/article/7797300.html
如果图简单点可以播放其他格式的视频,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 graph hr = 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"); }
相关文章推荐
- hjr-JAVA:WEB支持任意格式视频播放
- C# winform 第三方播放器COM组件,可播放任意格式视频....
- 在网页上实现任意格式的音视频快速播放功能的开发总结。
- 常用的视频格式文件WEB端播放代码
- iOS播放多种格式视频
- x265探索与研究(三):如何播放*.265格式的视频或解码视频流
- 常用音视频vlc播放的sdp文件格式
- 一个html5播放视频的video控件只支持android的默认格式mp4和3gp
- 集成Vitamio来播放网络视频(支持多种格式解码)
- 各种格式的视频播放的代码(smi格式)
- 解决WIN10播放AVI等格式视频黑屏只有声音的问题
- .net mvc 页面(静态页面)播放 .264格式视频文件
- 利用FMS3来播放H.264格式的mp4高清视频
- 网站上flv,MP4等格式的视频文件播放不出来的解决办法
- 各种格式的视频播放的代码(wmv格式)
- Html5 播放Hls格式视频
- 用Mencoder进行任意视频格式转换成flv
- ckplayer实现mp4等html5支持格式视频的网页播放
- 网站上flv,MP4等格式的视频文件播放不出来的解决办法
- 各种格式的视频播放的代码(wma格式)