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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

MFC学习之路之多媒体 --(1) DirectShow

發布時間:2023/12/2 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MFC学习之路之多媒体 --(1) DirectShow 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

可以說整個Windows的多媒體編程都是以DirectShow為基礎,那好,來吧,我們直接看DirectShow的一段基礎代碼。

bool Mp3::Load(LPCWSTR szFile) {Cleanup();ready = false;if (SUCCEEDED(CoCreateInstance( CLSID_FilterGraph,NULL,CLSCTX_INPROC_SERVER,IID_IGraphBuilder,(void **)&this->pigb)))//----------使用com口去獲取directShow指針{pigb->QueryInterface(IID_IMediaControl, (void **)&pimc);//--------控制player開關暫停pigb->QueryInterface(IID_IMediaEventEx, (void **)&pimex);pigb->QueryInterface(IID_IBasicAudio, (void**)&piba);//--------控制player音量pigb->QueryInterface(IID_IMediaSeeking, (void**)&pims);//--------控制player位置HRESULT hr = pigb->RenderFile(szFile, NULL);if (SUCCEEDED(hr)){ready = true;if(pims){pims->SetTimeFormat(&TIME_FORMAT_MEDIA_TIME);pims->GetDuration(&duration); // returns 10,000,000 for a second.duration = duration;}}}return ready; }bool Mp3::Play() {if (ready&&pimc){HRESULT hr = pimc->Run();return SUCCEEDED(hr);}return false; }bool Mp3::Pause() {if (ready&&pimc){HRESULT hr = pimc->Pause();return SUCCEEDED(hr);}return false; }bool Mp3::Stop() {if (ready&&pimc){HRESULT hr = pimc->Stop();return SUCCEEDED(hr);}return false; }bool Mp3::WaitForCompletion(long msTimeout, long* EvCode) {if (ready&&pimex){HRESULT hr = pimex->WaitForCompletion(msTimeout, EvCode);return *EvCode > 0;}return false; }bool Mp3::SetVolume(long vol) {if (ready&&piba){HRESULT hr = piba->put_Volume(vol);return SUCCEEDED(hr);}return false; }long Mp3::GetVolume() {if (ready&&piba){long vol = -1;HRESULT hr = piba->get_Volume(&vol);if(SUCCEEDED(hr))return vol;}return -1; }__int64 Mp3::GetDuration() {return duration; }__int64 Mp3::GetCurrentPosition() {if (ready&&pims){__int64 curpos = -1;HRESULT hr = pims->GetCurrentPosition(&curpos);if(SUCCEEDED(hr))return curpos;}return -1; }bool Mp3::SetPositions(__int64* pCurrent, __int64* pStop, bool bAbsolutePositioning) {if (ready&&pims){DWORD flags = 0;if(bAbsolutePositioning)flags = AM_SEEKING_AbsolutePositioning | AM_SEEKING_SeekToKeyFrame;elseflags = AM_SEEKING_RelativePositioning | AM_SEEKING_SeekToKeyFrame;HRESULT hr = pims->SetPositions(pCurrent, flags, pStop, flags);if(SUCCEEDED(hr))return true;}return false; }

?看完你應該會知道它是用了播放MP3的。這是一個微軟網站上下載的DEMO,原理真的很簡單,也就幾行代碼,幾乎不用看注釋就知道每個函數干什么用的。

DEMO里面用了C#作為界面,你也可以體會一下c#/c++是如何配合開發的。

源碼:Here

如果你在源碼天空里面找到很漂亮很商業化的MP3播放器,也可以下載來學習。不過,本人對MP3播放器沒什么興趣。

轉載于:https://www.cnblogs.com/Forest-zhu/archive/2011/12/13/2285847.html

總結

以上是生活随笔為你收集整理的MFC学习之路之多媒体 --(1) DirectShow的全部內容,希望文章能夠幫你解決所遇到的問題。

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