首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Unable to RenderStream when using SampleGrabber with Microsoft DTV-DVD Audio Decoder and Direct Sound Renederer

Unable to RenderStream when using SampleGrabber with Microsoft DTV-DVD Audio Decoder and Direct Sound Renederer
EN

Stack Overflow用户
提问于 2013-02-20 21:06:56
回答 1查看 1.3K关注 0票数 0

这对.wmv文件很有效。然而,当我尝试播放.mp4文件时。RenderStream失败。

然后我尝试用下面的filtet在GrapStudioNext中创建过滤器

文件源->LAV拆分器(自动加载)->SampleGrabber->MS DVD音频解码器->默认DirectSoude设备

上面的过滤器工作得很好,我要听音频。

代码语言:javascript
复制
HRESULT hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, 
                        IID_IGraphBuilder, (void **)&m_pGraph);
if(FAILED(hr))
{
ReleaseResource();
return hr;
}

hr = CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC_SERVER, IID_ICaptureGraphBuilder2, 
        (void **)&m_pBuilder);
    if (SUCCEEDED(hr))
    {
        m_pBuilder->SetFiltergraph(m_pGraph);
    }
else
{
std::cout<<"Failed to Created Capture Graph"<<std::endl;
ReleaseResource();
return hr;
}

hr = m_pGraph->QueryInterface(IID_IMediaControl, (void**)&m_pControl);
if(FAILED(hr))
{
std::cout<<"Failed to Get Media Control Interface"<<std::endl;
ReleaseResource();
return hr;
}

hr = m_pGraph->QueryInterface(IID_IMediaEvent, (void**)&m_pEvent);
if(FAILED(hr))
{
std::cout<<"Failed to Get Media Event"<<std::endl;
ReleaseResource();
return hr;
}

hr = m_pGraph->QueryInterface(IID_IMediaSeeking, (void**)&m_pMediaSeek);
if(FAILED(hr))
{
std::cout<<"Failed to Get Media Seeking"<<std::endl;
ReleaseResource();
return hr;
}

hr = m_pGraph->QueryInterface(IID_IBasicAudio, (void**)&m_pBasicAudio);
if(FAILED(hr))
{
std::cout<<"Failed to Get Basic Audio"<<std::endl;
ReleaseResource();
return hr;
}
#if 0
hr = CoCreateInstance(CLSID_AudioRender, NULL, CLSCTX_INPROC_SERVER, 
IID_IBaseFilter, (void**)&m_pBaseFilter);
#endif

hr = CoCreateInstance(CLSID_DSoundRender, NULL, CLSCTX_INPROC_SERVER, 
IID_IBaseFilter, (void**)&m_pBaseFilter);

if(FAILED(hr))
{
std::cout<<"Failed to Create Audio Render"<<std::endl;
ReleaseResource();
return hr;
}

hr = m_pGraph->AddFilter(m_pBaseFilter, L"Audio Filter");
if(FAILED(hr))
{
std::cout<<"Failed to Add Audio Render"<<std::endl;
ReleaseResource();
return hr;
}

hr = m_pGraph->AddSourceFilter((LPCWSTR)wxStr,L"SourceFlt", &m_pSourceFilter);
if(FAILED(hr))
{
std::cout<<"Failed to Add Source Filter"<<std::endl;
ReleaseResource();
return hr;
}

hr = CoCreateInstance(CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER, 
IID_IBaseFilter, (void**)&m_pBaseFilterSG);
if(FAILED(hr))
{
std::cout<<"Failed to Create Sample Grabber"<<std::endl;
ReleaseResource();
return 1;
}

hr = m_pGraph->AddFilter(m_pBaseFilterSG, L"Sample_Grabber");
if(FAILED(hr))
{
std::cout<<"Failed to Add Sample Grabber"<<std::endl;
ReleaseResource();
return 1;
}

hr = m_pBaseFilterSG->QueryInterface(IID_ISampleGrabber, (void**)&m_pSampleGrabber);

if(FAILED(hr))
{
std::cout<<"Query Interface Failed for Sample Grabber"<<std::endl;
ReleaseResource();
return 1;
}
ZeroMemory(&mt, sizeof(mt));
mt.majortype = MEDIATYPE_Audio;
mt.subtype = MEDIASUBTYPE_RAW_AAC1;
 hr = m_pSampleGrabber->SetMediaType(&mt);

  if(FAILED(hr))
{
std::cout<<"Failed to Set Media Type"<<std::endl;
ReleaseResource();
return 1;
}

hr = CoCreateInstance(CLSID_CMPEG2AudDecoderDS , NULL, CLSCTX_INPROC_SERVER, 
IID_IBaseFilter, (void**)&m_pMSAduioDecoder);
if(FAILED(hr))
{
std::cout<<"Failed to Create Sample Grabber"<<std::endl;
ReleaseResource();
return 1;
}

hr = m_pGraph->AddFilter(m_pMSAduioDecoder, L"Audio_Decoder");
if(FAILED(hr))
{
std::cout<<"Failed to Add Adudio Decoder"<<std::endl;
ReleaseResource();
return 1;
}

hr = m_pBuilder->RenderStream( &PIN_CATEGORY_CAPTURE, &MEDIATYPE_Audio,m_pSourceFilter, m_pBaseFilterSG,m_pMSAduioDecoder);
 if(FAILED(hr))
{
std::cout<<"Failed to Render First Chain"<<std::endl;
ReleaseResource();
return hr;
}

  hr = m_pBuilder->RenderStream(NULL, NULL,m_pMSAduioDecoder,NULL,  m_pBaseFilter);
 if(FAILED(hr))
{
std::cout<<"Failed to Render Second Chain"<<std::endl;
ReleaseResource();
return hr;
}

同样,当我用SetMediaType连接到MEDIATYPE_Video时,第一个链连接正常。但是,即使在使用PIN_CATEOGARY_CAPTURE和MediaType_Audio之后,也有几秒钟的时间会失败。

另外,我在RenderStream中得到的错误是无效的参数。

请建议可能出错的地方。提前谢谢。

普拉迪普

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-21 04:44:59

这是完全错误的。您根本没有捕获源,因此尝试利用capture Graph Builder首先是软弱的。你的图中没有一个是PIN_CATEGORY_CAPTURE的引脚,所以它失败了。

你知道你需要使用的所有过滤器,CoCreateInstanceIGraphBuilder::AddFilterIPin::Connect对于图形构建就足够了,在这里你根本不需要捕获图形生成器。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14980607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档