Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用DirectShow.NET时出现音频同步问题_C#_.net_Synchronization_Directshow_Directshow.net - Fatal编程技术网

C# 使用DirectShow.NET时出现音频同步问题

C# 使用DirectShow.NET时出现音频同步问题,c#,.net,synchronization,directshow,directshow.net,C#,.net,Synchronization,Directshow,Directshow.net,我已经在DirectShow.NET论坛上开始了一个关于这个的帖子,这里是链接 但不幸的是,问题仍然存在 我有一个应用程序,可以从网络摄像头捕获视频,从麦克风捕获音频,并将其保存到文件中。由于某些原因,音频和视频从不同步,我尝试了以下方法: 1.从ffdshow编码器开始,改为AVI Mux-问题仍然存在,音频延迟,视频结束时图片保持冻结,音频继续 2.从AVI Mux更改为WM ASF Writer-视频在开始时冻结(2秒),其余视频同步(但前两秒不可用) 3.创建同时打印音频和视频时间戳的S

我已经在DirectShow.NET论坛上开始了一个关于这个的帖子,这里是链接 但不幸的是,问题仍然存在

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

哦,我忘了提一下,我也尝试过用GraphiditPlus构建图表,但问题仍然存在,这里有一个指向图表的链接:

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

如果您有任何建议,我将不胜感激,我没有希望:/

谢谢

埃兰

更新:


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

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

见:


是关键词

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

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

我发现Avi Mux不处理同步,它假设数据在适当的时间到达(写在这里-),所以我尝试使用WMAsfWriter处理同步,它工作得很好(我上面提到的2秒冻结只是VLC播放器的一个小故障)但是它在高分辨率下工作不好,我在使用自定义配置文件时遇到了麻烦(过滤器无法连接)

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

我的最终解决方案是放弃MPEG4,只使用MPEG2,我从Avi Mux切换到Microsoft MPEG2编码器,它工作得很好,很久以前就应该想到:)

希望这能帮助其他人

谢谢


Eran.

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

在不放弃MPEG-4的情况下,我的最终解决方案是配置AviMuxer设置属性

如MSDN配置中的文章所述:

如果您从两个独立的设备捕获音频和视频,这是一个 让音频流成为主流的好主意。这有助于 防止两个流之间的漂移,因为AVI Mux过滤器 调整视频流上的播放速率以匹配音频 小溪

示例代码:

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

嗨,很好的信息,谢谢!我试着使用它,但没有什么不同:/我最终改回了WMAsfWriter,似乎我看到的2秒冻结是VLC的问题,而不是视频本身。。。现在我需要了解的是,我可以使用什么配置文件来制作1080p视频,如果你知道这会对我有很大帮助,那就太糟糕了,我再也没有项目来测试这个了,这看起来很有希望!)我只是用这段代码来修复自定义WMV到AVI视频转换器中的漂移,效果很好!