为什么会阻塞在CBaseOutputPin::Deliver里

XLLeon 2005-10-15 10:41:52
用directshow编写推模式的source filter,继承CSource类来实现filter,继承CSourceStream类来实现Pin,然后重写FillBuffer函数来实现.这个filter从服务器的两个端口上分别接收视频和音频,然后push到下一个filter中去,Video Pin(divx数据)和Audio Pin(8kPCM)都是继承CSourceStream,当服务器不发送音频时,如果在Audio Pin的FillBuffer中进行长时间的等待,Video Pin的FillBuffer也会停止向下Push数据.所以改了CSourceStream::DoBufferProcessingLoop,当Audio Pin的FillBuffer等待超时后,重新进行DoBufferProcessingLoop,程序就不会阻塞在Audio Pin的FillBuffer里了.可还是不行,拿不到音频数据,Video Pin会阻塞在CSourceStream::DoBufferProcessingLoop中CBaseOutputPin::Deliver里,打印信息显示Video Pin已成功提交了20多帧图像,然后就堵住了.是时间同步的原因么,我去掉了参考时钟啊
...全文
136 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
XLLeon 2005-10-17
  • 打赏
  • 举报
回复
高手和专家都上哪儿去了?
XLLeon 2005-10-16
  • 打赏
  • 举报
回复
Video和Audio的FillBuffer当然不是同一个函数.Audio的FillBuffer是在一直调用,但我在中间进行了Sleep处理,让出了很长时间的执行权.我的确怀疑是同步的问题,但我去掉了参考时钟,而且每个mediaSample都settime(NULL,NULL).
daizq 2005-10-15
  • 打赏
  • 举报
回复
是同步的问题造成的,要注意数据处理的均衡.
yyhzpk 2005-10-15
  • 打赏
  • 举报
回复
Video和Audio的FillBuffer是同一个函数吗,是不是
Audio里没有返回正确值时,音频播放filter会一直调用
FillBuffer?

2,543

社区成员

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

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