使用DirectShow.NET音频同步问题(Audio Sync problems using D

2019-07-29 01:50发布

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

我有一个从麦克风摄像头和音频捕获视频,并将其保存到一个文件的应用程序,由于某种原因,音频和视频都从来没有在同步,我试过如下:1.入门ffdshow的编码器,并更改为AVI复用 - 问题仍然存在,音频延迟,在视频的结尾处的画面仍然冻结,音频继续2. AVI MUX改为WM ASF作家 - 视频在开始时冻结(2秒)和视频的其余部分是在-sync(但两个第一秒钟都不能使用)3.创建SampleGrabber,打印的音频和视频的标记 - 看到音频时间戳为500ms较早,但我不知道该怎么办接受这个事实...... 4。试过ReferenceClock手动设置来捕获过滤器之一(音频/视频)但都不会投给IReferenceClock 5.创建一个SystemClock并将其设置有ReferenceClock - 在虎视眈眈没有什么区别6.设定SyncUsingStreamOffset(真) - 时间戳现在更接近,但最后的结果是 同样7.尝试保存音频和视频两个不同的文件和使用的VirtualDub,以查看它们是否匹配,他们仍然不...

哦,我忘了说我还试图建立图表中GraphEditPlus,但问题仍然存在,这里是向图中的链接: http://www2.picturepush.com/photo/a/8030745/img/8030745.png

目前,我正在测试我从DirectShow.NET的样本CapWMV样品的所有变化。

请任何意见将非常感激,我很绝望:/

谢谢,

他们是。

更新:

这似乎有音频和视频之间的恒定500ms的差距,如果我使用的VirtualDub由500毫秒,它看起来罚款延迟音频,怎么可以在图表设置呢?

Answer 1:

您正在对等于捕捉缓冲区的大小音频流的延迟。 也就是说,你得到它开始被抓获0.5秒走全缓冲。 您需要使用更小的缓冲器和/或缓冲器应用偏移来调整延迟。

看到:

  • 在最小化DirectShow的音频采集延迟
  • 如何消除在DirectShow过滤器链1秒的延迟? (使用Delphi和DSPACK)

IAMBufferNegotiation是关键字。



Answer 2:

只是想补充的解决方案,我的情况,也许这将帮助别人。

我试图记录与从一个麦克风音频一起网络摄像头视频,视频是高清(1080p),所以我想保存在MPEG4编码的AVI文件,所以我用ffshow-tryous(免费的MPEG4编码器)连同阿维复用器过滤器,问题是,一些(当然大部分:))我的影片有不同步的问题。

我发现的是,阿维复用器不处理同步,它假定数据到达适当的时候(这里写的- http://msdn.microsoft.com/en-us/library/dd407208(v=vs.85)。 ASPX ),所以我尝试使用WMAsfWriter它不处理同步,它能正常工作(2秒冻结我上面提到的只是一个与VLC播放器故障),但它不与高分辨率的工作很好,我不得不使用它与自定义的麻烦型材(过滤器不会得到连接)。

我也尝试过罗马的建议,虽然联系是非常有趣和有前途的(我真的建议你阅读它们 - 不能给+1后尚未...),它只是没有什么不同:/

我最终的解决办法是放弃了对MPEG4,只使用MPEG2,我从阿维复用微软MPEG-2编码器伟大的工程,应该有想过很久以前切换:)

希望这会帮助别人。

谢谢,

他们是。



Answer 3:

我有同样的问题,从WMV视频渲染使用Xvid的MPEG-4解码的AVI。

没有放弃最后的解决方案MPEG-4是配置AviMuxer设置ConfigAviMux :: SetMasterStream财产

正如解释捕获视频的AVI文件从MSDN配置文章:

如果你是从两个独立的设备捕获音频和视频, 这是一个好主意,使音频流主控流 。 这有助于防止这两个流之间漂移,这是因为AVI多路复用器过滤器调整对视频流的播放速率相匹配的音频流。

示例代码:

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


文章来源: Audio Sync problems using DirectShow.NET