使用DirectShow.NET的音频同步问题

我已经在DirectShow.NET的论坛上开始了一个post,这里是链接http://sofzh.miximages.com/c%23/8030745.png

目前,我正在测试来自DirectShow.NET样本的CapWMV样本的所有更改。

请高度赞赏任何建议,我没有希望:/

谢谢,

伊兰。

更新:

似乎音频和video之间有500毫秒不等的差距,如果我使用virtualDub将音频延迟500毫秒它看起来很好,怎么能在图中设置它?

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

看到:

  • 最大限度地减少DirectShow中的音频捕获延迟
  • 如何消除DirectShow过滤链中的1秒延迟? (使用Delphi和DSPACK)

IAMBufferNegotiation是关键字。

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

我试图将来自网络摄像头的video与来自麦克风的音频一起录制,video是HD(1080p),因此我想保存以MPEG4编码的AVI文件,因此我使用了ffshow-tryous(免费的Mpeg4编码器)和Avi Mux过滤,问题是我的video中的一些(其中大多数:))都有同步问题。

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

我也尝试了罗曼的建议,虽然链接非常有趣和有前途(我真的建议阅读它们 – 不能给一个post+1但是……)它只是没有任何区别:/

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

希望这会帮助别人。

谢谢,

伊兰。

我有同样的问题使用Xvid MPEG-4解码器将video从WMV渲染到AVI。

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

如从MSDN配置中捕获video到AVI文件中所述:

如果要从两个独立的设备捕获音频和video, 最好将音频流作为主流 。 这有助于防止两个流之间的漂移,因为AVI Mux滤波器调整video流上的回放速率以匹配音频流。

示例代码:

 IConfigAviMux _filterAVIMuxerCfg = (IConfigAviMux)_filterAVIMuxer; _filterAVIMuxerCfg.SetMasterStream(0); // I've add first audio ;)