我已经在 DirectShow.NET 论坛上启动了一个主题,这里是链接http://sourceforge.net/projects/directshownet/forums/forum/460697/topic/5194414/index/page/1 http://sourceforge.net/projects/directshownet/forums/forum/460697/topic/5194414/index/page/1但不幸的是问题仍然存在......
我有一个应用程序,可以从网络摄像头捕获视频并从麦克风捕获音频并将其保存到文件中,由于某种原因音频和视频永远不会同步,我尝试了以下操作:
1. 从 ffdshow 编码器开始,更改为 AVI Mux - 问题仍然存在,音频延迟,在视频结束时,图片保持冻结状态,音频继续
2.从AVI Mux更改为WM ASF Writer - 视频在开始时被冻结(2秒),视频的其余部分是同步的(但前两秒不可用)
3. 创建 SampleGrabber 来打印音频和视频的时间戳 - 看到音频时间戳早了 500 毫秒,但我不知道如何处理这个事实......
4.尝试手动将ReferenceClock设置为捕获过滤器(音频/视频)之一,但两者都不会转换为IReferenceClock
5.创建一个SystemClock并将其设置为ReferenceClock - 没有区别
6. 在图表上设置 SyncUsingStreamOffset(true) - 时间戳现在更接近,但最终结果是相同的
7.尝试将音频和视频保存到两个不同的文件并使用VirtualDub查看它们是否匹配,但仍然不匹配...
哦,我忘了提及我也尝试在 GraphEditPlus 中构建图表,但问题仍然存在,这是该图表的链接:http://www2.picturepush.com/photo/a/8030745/img/8030745.png http://www2.picturepush.com/photo/a/8030745/img/8030745.png
目前,我正在 DirectShow.NET 示例中的 CapWMV 示例上测试我的所有更改。
请提供任何建议,我将不胜感激,我绝望了:/
Thanks,
Eran.
Update:
音频和视频之间似乎有一个恒定的 500ms 间隙,如果我使用 virtualDub 将音频延迟 500ms 看起来不错,如何在图中设置它?
您的音频流延迟等于捕获缓冲区的大小。也就是说,您获得了 0.5 秒后开始捕获的完整缓冲区。您需要使用较小的缓冲区和/或在缓冲区上应用偏移来调整延迟。
See:
- 最大限度地减少 DirectShow 中的音频捕获延迟 http://sid6581.wordpress.com/2006/10/09/minimizing-audio-capture-latency-in-directshow/
- 如何消除 DirectShow 过滤器链中 1 秒的延迟? (使用Delphi和DSPACK) https://stackoverflow.com/questions/7881420/how-to-eliminate-1-second-delay-in-directshow-filter-chain-using-delphi-and-ds
IAMBufferNegotiation http://msdn.microsoft.com/en-us/library/windows/desktop/dd389142%28v=vs.85%29.aspx是关键字。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)