ICaptureGraphBuilder2::RenderStream的连接如何断开?

SonicX 2009-02-27 03:27:42
我用
fBuild.RenderStream(@PIN_CATEGORY_PREVIEW, @MEDIATYPE_Audio, fCap, nil, pDSoundRender)
连接后如果不需要的该如何断开?

Delphi7
////////////////////////////////////////////////////////
fCap:=GetBaseFilter(0); //得到视频设备过程略
CocreateInstance(CLSID_CaptureGraphBuilder2, nil, CLSCTX_INPROC, IID_ICaptureGraphBuilder2, pBuild);
CocreateInstance(CLSID_FilterGraph, nil, CLSCTX_INPROC, IID_IFilterGraph, pGraph);
pBuild.SetFiltergraph(pGraph);
fGraph.AddFilter(fCap, 'VideoCap'); //添加视频设备Filter
CoCreateInstance(CLSID_DSoundRender, nil, CLSCTX_INPROC_SERVER, IID_IBaseFilter, pSoundRender);
fGraph.AddFilter(pSoundRender, 'SoundRender'); //添加声音Filter
fBuild.RenderStream(@PIN_CATEGORY_PREVIEW, @MEDIATYPE_Audio, fCap, nil, pDSoundRender); //建立声音播放连接
fBuild.RenderStream(@PIN_CATEGORY_PREVIEW, @MEDIATYPE_Video, fCap, nil, nil); //建立视频播放连接
fGraph.QueryInterface(IID_IMediaControl, fMControl);
fMControl.Run; //播放
...全文
268 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
瓶盒 2009-02-27
  • 打赏
  • 举报
回复
一般而言是找到连接的两个Pin,然后对两个Pin分别调用IGraphBuilder::Disconnect( IPin *ppin)去断开
asddg67 2009-02-27
  • 打赏
  • 举报
回复
	HRESULT hr = S_OK;
if (m_pMC)
{
OAFilterState state;
int times = 10;
while(times)
{
m_pMC->GetState(40, &state);
if (State_Stopped == state)
{
if (m_pSourceFilter)
NukeDownStream(m_pGB, m_pSourceFilter);

RemoveAllFilterInGraph(m_pGB);
return true;
}
hr = m_pMC->Stop();
times--;
}
}
if (FAILED(hr))
{
return false;
}

2,553

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 多媒体/流媒体开发
社区管理员
  • 多媒体/流媒体开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧