当前位置: 代码迷 >> 多媒体/流媒体开发 >> 一个关于DirectShow的有关问题
  详细解决方案

一个关于DirectShow的有关问题

热度:5911   发布时间:2013-02-26 00:00:00.0
一个关于DirectShow的问题!
C/C++ code
void main(){    HRESULT hr = CoInitialize(NULL);    if (FAILED(hr))    {        // Add error-handling code here. (Omitted for clarity.)    }    IGraphBuilder *pGraph;    hr = CoCreateInstance(CLSID_FilterGraph, NULL,     CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph);    IMediaControl *pControl;    IMediaEvent   *pEvent;    IMpegAudioDecoder *pDecoder;    IBaseFilter *pFilter;    pFilter=NULL;        hr = pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);    hr = pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent);    hr = pGraph->AddFilter(pFilter,L"Source");        hr = pFilter->QueryInterface(IID_IMpegAudioDecoder,(void **)&pDecoder);//注意:这行报错。    hr = pDecoder->put_DualMode(AM_MPEG_AUDIO_DUAL_RIGHT);        hr = pGraph->RenderFile(L"C:\\123.dat", NULL);        hr = pControl->Run();    }


初学DirectShow,不知道那个IMpegAudioDecoder要怎么弄才会出效果,
希望懂的朋友指教一下!

------解决方案--------------------------------------------------------
IBaseFilter *pFilter;
pFilter=NULL;
...
hr = pGraph->AddFilter(pFilter,L"Source"); //pFilter是空的,这步就已经失败了,后面用到pFilter肯定会出问题.
hr = pFilter->QueryInterface(IID_IMpegAudioDecoder,(void **)&pDecoder;
IID_IMpegAudioDecoder这个你需要知道它的GUID之类的标识符,定义为宏来使用.
Filter也需要通过CoCreateInstance拿到后再加入Graph里面.

建议楼主可以多看下SDK里的DirectShow Sample,或者去MSDN找DirectShow的教程看看.
  相关解决方案