我理解的对么?

lanhxg 2012-01-05 01:22:06
directshow播放顺序
我在网上看了些帖子,但是和我理解的存在点疑问,来这里问问。
我的理解是这样:
1)

hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER,
IID_IGraphBuilder, (void **)&pGraph);
//hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC,
//IID_IMediaControl, (void **)&pMC);
//以上两句只是通过不同的方式来来获取FilterGraph 并且 可以通过IID_IGraphBuilder IID_IMediaControl 互相获取对方!也可以获取其他借口只是要遵循下面的规则:


hr = pMC->QueryInterface(IID_IGraphBuilder, (void **)&pGraph);
hr = pGraph->RenderFile(lpszMovie, NULL);//是不是这句要传给filer graph视频 然后只用这句调用完成之后才会 有真正的内容在filer graph(类似于实例化一个对象)
//然后才可以通过pGraph 获取其他借口 ,对视频的控制才有效果
//总结是就是pGraph->RenderFile 必须先于pGraph->QueryInterface(IID_IMediaSeeking, (void **)&pMediaSeekiking);
//pGraph->QueryInterface(IID_IMediaPosition, (void **)&pMediaPos);
//pGraph->QueryInterface(IID_IVideoWindow, (void **)&pVideoWnd);
//pGraph->QueryInterface(IID_IBasicVideo, (void **)&pBasicVideo);
//调用才会有用,打破了这个顺序就会出错。


pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl);
pGraph->QueryInterface(IID_IMediaEventEx, (void **)&pEvent);//pMC->QueryInterface(IID_IMediaEventEx, (void **)&pME); 这两句是一样的
pGraph->QueryInterface(IID_IMediaSeeking, (void **)&pMediaSeekiking);
pGraph->QueryInterface(IID_IMediaPosition, (void **)&pMediaPos);
pGraph->QueryInterface(IID_IVideoWindow, (void **)&pVideoWnd);
pGraph->QueryInterface(IID_IBasicVideo, (void **)&pBasicVideo);

hr = pControl->Run();
hr = pEvent->WaitForCompletion(INFINITE, &evCode);//调用这这句会发生阻塞,等待视频播放完成
//如果我这时候调用pMediaPos->put_CurrentPosition();的会产生中断,处理这个设置当前视频的位置



忘指正!谢谢
...全文
98 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
基本上是正确
wshcdr 2012-01-06
  • 打赏
  • 举报
回复
正确的
lanhxg 2012-01-05
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 fishion 的回复:]

你的理解大致上正确了
[/Quote]
兔子党的极大肯定啊!!!3Q
fishion 2012-01-05
  • 打赏
  • 举报
回复
你的理解大致上正确了

3,245

社区成员

发帖
与我相关
我的任务
社区描述
ATL,Active Template Library活动(动态)模板库,是一种微软程序库,支持利用C++语言编写ASP代码以及其它ActiveX程序。
社区管理员
  • ATL/ActiveX/COM社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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