日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

c++ DirectShow播放任意格式的视频

發(fā)布時(shí)間:2025/3/21 c/c++ 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++ DirectShow播放任意格式的视频 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

利用opencv只能處理.avi的視頻,opencv之前的版本之前試過好像是只能處理.avi未壓縮版本的視頻,未壓縮過的視頻相當(dāng)大,一個(gè)文件大概是幾十個(gè)G。(這個(gè)不確定,因?yàn)橹坝玫膲嚎s過的.avi的格式的cvCreateFileCapture時(shí)會(huì)出錯(cuò))

后來利用opencv的新版本可以處理H.264/mpeg4等壓縮格式的.avi文件,但是還是不能處理像現(xiàn)在很廣泛應(yīng)用的flv等格式,當(dāng)然可以用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

如果圖簡(jiǎn)單點(diǎn)可以播放其他格式的視頻,windows下可以直接用DirectShow。

DirectShow是微軟公司在ActiveMovie和Video for Windows的基礎(chǔ)上推出的新一代基于COM(Component Object Model)的流媒體處理的開發(fā)包。DirectShow使用一種叫Filter Graph的模型來管理整個(gè)數(shù)據(jù)流的處理過程。它廣泛地支持各種媒體格式,包括Asf、Mpeg、Avi、Dv、Mp3、Wave等,為多媒體流的捕捉和回放提供了強(qiáng)有力的支持。

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

不多說了,代碼也很簡(jiǎn)單,只是能播放視頻而已。

?

#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自動(dòng)根據(jù)要播放的文件的格式,生成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"); }


?


?

總結(jié)

以上是生活随笔為你收集整理的c++ DirectShow播放任意格式的视频的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。