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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

基于DirectShow的简单播放器

發布時間:2023/12/20 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于DirectShow的简单播放器 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

  一?個簡單的基于DirectShow的打開本地視頻文件的例子。

  參考了各種資材,網上很多,也比較簡單,但有個問題就是在調用" RenderFile "函數時只有在x86下都會返回S_OK,很費解。。。待繼續深入研究一下。

代碼:

IGraphBuilder *gGraph = NULL;IMediaControl *gControl = NULL;IMediaEvent *gEvent = NULL;

?

bool CreateSimplerPlayer(PTSTR pstrFileName){// init comHRESULT hr = CoInitialize(NULL);if (FAILED(hr))return false;// init gragh builderhr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void**)&gGraph);if (FAILED(hr))return false;// query controler interface in graphbuilderhr = gGraph->QueryInterface(IID_IMediaControl, (void**)&gControl);if (FAILED(hr))return false;// query event interface in graphbuilderhr = gGraph->QueryInterface(IID_IMediaEvent, (void**)&gEvent);if (FAILED(hr))return false;hr = gGraph->QueryInterface(IID_IBasicVo, (void**)&gVideo);if (FAILED(hr))return false; // read a filehr = gGraph->RenderFile(pstrFileName, NULL);if (!FAILED(hr)){hr = gControl->Run();if (SUCCEEDED(hr)){long evCode;gEvent->WaitForCompletion(INFINITE, &evCode);return true;}}return false;}

主要就是RenderFile,只要選擇播放的文件,IGraphBuilder就智能地幫你構造出整個Filter Graph。

下面是在控制臺程序中打開文件管理對話框的代碼,選擇好文件后將文件路徑傳給CreateSimplerPlayer。

代碼:

TCHAR szBuffer[MAX_PATH] = { 0 };OPENFILENAME file = { 0 };file.hwndOwner = NULL;file.lStructSize = sizeof(file);file.lpstrFilter = _T("所有文件(*.*)\0*.*\0Exe文件(*.exe)\0*.exe\0");//要選擇的文件后綴 file.lpstrInitialDir = _T("E:\\");//默認的文件路徑 file.lpstrFile = szBuffer;//存放文件的緩沖區 file.nMaxFile = sizeof(szBuffer) / sizeof(*szBuffer);file.nFilterIndex = 0;file.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_EXPLORER;//標志如果是多選要加上OFN_ALLOWMULTISELECTBOOL bSel = GetOpenFileName(&file);//cout << file.lpstrFile << endl; SimplePlayer::CreateSimplerPlayer(file.lpstrFile);

?

轉載于:https://www.cnblogs.com/-sev-/p/8385396.html

總結

以上是生活随笔為你收集整理的基于DirectShow的简单播放器的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。