我已经在DirectShow.NET的论坛上启动了一个线程,这里是链接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 is,但我不知道该如何处理这个事实……4.尝试手动将ReferenceClock设置为捕获过滤器(音频/视频)之一,但两者都不会转换为IReferenceClock 5。创建了一个SystemClock,并设置了ReferenceClock --没有什么不同。在grap上设置SyncUsingStreamOffset(真)现在更接近了,但最终结果是相同的7。尝试将音频和视频保存到两个不同的文件中,并使用VirtualDub查看它们是否匹配,它们仍然没有.
哦,我忘了我也试过用GraphEditPlus构建图,但问题仍然存在,下面是一个指向图的链接:http://www2.picturepush.com/photo/a/8030745/img/8030745.png
目前,我正在测试DirectShow.NET示例中的CapWMV示例中的所有更改。
请给我任何建议,我是无可救药的。
谢谢,
伊兰。
更新:
在音频和视频之间似乎有一个恒定的500毫秒的间隔,如果我使用virtualDub将音频延迟500毫秒,它看起来很好,如何在图表中设置这个呢?
发布于 2012-04-21 20:45:01
只是想为我的处境添加一个解决方案,也许它会对某人有所帮助。
我试图用摄像头记录视频和麦克风的音频,视频是HD (1080 P),所以我想保存一个用MPEG4编码的AVI文件,所以我使用了ffshow(免费的Mpeg4编码器)和一个Avi Mux过滤器,问题是我的视频中有一些(大部分是:)存在同步问题。
我发现Avi不处理同步,它假设数据在适当的时间到达(写在这里- http://msdn.microsoft.com/en-us/library/dd407208(v=vs.85).aspx,所以我尝试使用处理同步的WMAsfWriter,它运行得很好(我上面提到的2秒冻结只是VLC播放器的一个故障),但是它在高分辨率下不能很好地工作,而且我在使用自定义配置文件时遇到了困难(过滤器不会连接)。
我也尝试了罗曼的建议,尽管链接非常有趣和有希望(我真的推荐阅读它们-还不能给一个帖子+1 )。这并没有什么区别
我的最后一个解决方案是放弃MPEG4,只使用MPEG2,我从about切换到了工作出色的Microsoft MPEG2编码器,应该在很久以前就想到了:)
希望这能帮到别人。
谢谢,
伊兰。
发布于 2012-04-19 19:57:53
您在音频流上的延迟与捕获缓冲区的大小相等。也就是说,您将获得开始在0.5秒之外捕获的完整缓冲区。您需要使用更小的缓冲区和/或在缓冲区上应用偏移量来调整延迟。
请参见:
IAMBufferNegotiation是关键字。
发布于 2014-03-06 10:19:35
我在用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 ;)https://stackoverflow.com/questions/10229176
复制相似问题