在directshow中如何判断文件播放完毕

zjl3638656 2007-04-18 04:46:02
如何判断文件播放完毕???我用的wav
...全文
557 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
hlj8676 2008-12-07
  • 打赏
  • 举报
回复
当播放结束后,会产生事件EC_COMPLETE
hlj8676 2008-12-07
  • 打赏
  • 举报
回复
当播放结束后,会产生事件EC_COMPLETE
crane02 2007-04-27
  • 打赏
  • 举报
回复
代码是摘下来的,不完整,省略了些,希望能看懂
crane02 2007-04-27
  • 打赏
  • 举报
回复
1、首先创建bulider
hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&m_pGB);
2、查询其ImediaEvent接口
hr = m_pGB->QueryInterface(IID_IMediaEventEx, (void **)&m_pEvent);
3、给m_pEvent设置事件通知窗口//WM_GRAPHNOTIFY为自定义消息
hr = m_pEvent->SetNotifyWindow((OAHWND)(this->GetSafeHwnd()),WM_GRAPHNOTIFY, 0);
4、自定义消息处理函数
LRESULT C**Dlg::OnGraphNotify(WPARAM inWParam, LPARAM inLParam)
{
if (m_pEvent)
{
LONG eventCode = 0, eventParaml = 0,eventParam2 = 0;
while (SUCCEEDED(m_pEvent->GetEvent(&eventCode, &eventParaml, &eventParam2,0)))
{
//获得消息后,释放参数
m_pEvent->FreeEventParams(eventCode, eventParaml, eventParam2);
switch(eventCode)
{
case EC_COMPLETE:
}
}
}
如果还是不清楚,给我发邮件linyufei0237@yahoo.com.cn
happydeer 2007-04-24
  • 打赏
  • 举报
回复
playwnd是注册了一个windows消息。当directshow内部有事件发生时,会发送这个windows消息给应用程序,这时候应用程序就可以通过IMediaEvent接口去判断是不是EC_COMPLETE事件。

你给出的CDXGraph::IsEnd大致是对的,但看起来你想用一个定时器去不断调用IsEnd函数,这就不对了。
zx_star 2007-04-24
  • 打赏
  • 举报
回复
看样子是对的
zjl3638656 2007-04-19
  • 打赏
  • 举报
回复
是不是这样:
bool CDXGraph::IsEnd(void)
{
LONG evCode, evParam1, evParam2;
if (mGraph && mEvent)
{
if (SUCCEEDED(mEvent->GetEvent(&evCode, (LONG_PTR *) &evParam1,
(LONG_PTR *) &evParam2, 0)))
{
return evCode == EC_COMPLETE;
}
}
return false;
}
参照playwnd写的,不知道对不对,正要测试
happydeer 2007-04-19
  • 打赏
  • 举报
回复
参考PlayWnd例子。文件播放完后,你可以收到一个EC_COMPLETE事件。
rageliu 2007-04-19
  • 打赏
  • 举报
回复
完毕后会有消息,IMediaEvent Interface can help you
lamue 2007-04-18
  • 打赏
  • 举报
回复
if end then call stopstream()

2,543

社区成员

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

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