4

我已经在 DirectShow.NET 的论坛上开始了一个线程,这里是链接http://sourceforge.net/projects/directshownet/forums/forum/460697/topic/5194414/index/page/1 但不幸的是问题仍然存在...

我有一个应用程序,它从网络摄像头捕获视频并从麦克风捕获音频并将其保存到文件中,由于某种原因,音频和视频永远不会同步,我尝试了以下方法: 1. 从 ffdshow 编码器开始并更改为 AVI多路复用器 - 问题仍然存在,音频延迟,在视频结束时图片保持冻结,音频继续 2. 从 AVI 多路复用器更改为 WM ASF 写入器 - 视频在开始时冻结(2 秒),其余视频在-sync(但前两秒不可用) 3. 创建打印音频和视频时间戳的 SampleGrabber - 看到音频时间戳早于 500 毫秒,但我不知道如何处理这个事实...... 4。尝试手动将 ReferenceClock 设置为捕获过滤器之一(音频/视频),但两者都不会转换为 IReferenceClock 5。创建了一个 SystemClock 并设置它具有 ReferenceClock - 没有区别 6. 在 grap 上设置 SyncUsingStreamOffset(true) - 时间戳现在更接近但最终结果相同 7. 尝试将音频和视频保存到两个不同的文件并使用VirtualDub 看看他们是否匹配,他们仍然不...

哦,我忘了提到我也尝试在 GraphEditPlus 中构建图表,但问题仍然存在,这是图表的链接:http ://www2.picturepush.com/photo/a/8030745/img/8030745.png

目前我正在测试我对 DirectShow.NET 样本中 CapWMV 样本的所有更改。

请任何建议将不胜感激,我很绝望:/

谢谢,

伊兰。

更新:

音频和视频之间似乎有一个恒定的 500ms 间隙,如果我使用 virtualDub 将音频延迟 500ms 看起来很好,如何在图表中设置它?

4

3 回答 3

4

您在音频流上的延迟等于捕获缓冲区的大小。也就是说,您获得了 0.5 秒后开始被捕获的完整缓冲区。您需要使用较小的缓冲区和/或在缓冲区上应用偏移量来调整延迟。

看:

IAMBufferNegotiation是关键字。

于 2012-04-19T19:57:53.400 回答
2

只是想为我的情况添加解决方案,也许它会对某人有所帮助。

我试图从网络摄像头录制视频以及来自麦克风的音频,视频是高清(1080p)所以我想保存一个以 MPEG4 编码的 AVI 文件,所以我使用了 ffshow-tryous(免费 Mpeg4 编码器)和一个 Avi Mux过滤器,问题是我的一些视频(其中大部分 :) )有同步问题。

我发现 Avi Mux 不处理同步,它假定数据在适当的时间到达(写在这里 - http://msdn.microsoft.com/en-us/library/dd407208(v=vs.85)。 aspx),所以我尝试使用处理同步的 WMAsfWriter 并且它运行良好(我上面提到的 2 秒冻结只是 VLC 播放器的一个小故障),但它不适用于高分辨率,我在使用自定义时遇到了麻烦配置文件(过滤器不会连接)。

我也尝试了 Roman 的建议,虽然链接非常有趣且很有前途(我真的建议阅读它们 - 还不能给帖子 +1 ......)它只是没有任何区别:/

我的最终解决方案是放弃 MPEG4,只使用 MPEG2,我从 Avi Mux 切换到 Microsoft MPEG2 Encoder,效果很好,很久以前就应该考虑过 :)

希望这会对其他人有所帮助。

谢谢,

伊兰。

于 2012-04-21T20:45:01.123 回答
1

我在使用 Xvid MPEG-4 解码器将视频从 WMV 渲染到 AVI 时遇到了同样的问题。

不放弃 MPEG-4的最终解决方案是配置 AviMuxer 设置ConfigAviMux::SetMasterStream属性

如从 MSDN 配置捕获视频到 AVI 文件一文中所述:

如果您从两个单独的设备捕获音频和视频,最好将音频流设为主流。这有助于防止两个流之间的漂移,因为 AVI Mux 过滤器会调整视频流的播放速率以匹配音频流。

示例代码:

IConfigAviMux _filterAVIMuxerCfg = (IConfigAviMux)_filterAVIMuxer;
_filterAVIMuxerCfg.SetMasterStream(0); // I've add first audio ;)
于 2014-03-06T10:19:35.360 回答