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

标签 c# .net synchronization directshow directshow.net

我已经在 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 毫秒,但我不知道如何处理这个事实...... 4. 尝试手动将 ReferenceClock 设置为捕获过滤器(音频/视频)之一,但两者都不会转换到 IReferenceClock 5. 创建一个 SystemClock 并设置它有 ReferenceClock - 没有区别 6. 在图表上设置 SyncUsingStreamOffset(true) - 时间戳现在更接近了,但最终结果是一样的 7. 尝试将音频和视频保存到两个不同的文件并使用VirtualDub 看它们是否匹配,他们仍然不...

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

目前我正在测试我对 DirectShow.NET 示例中的 CapWMV 示例所做的所有更改。

非常感谢任何建议,我很绝望:/

谢谢,

伊兰。

更新:

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

最佳答案

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

参见:

IAMBufferNegotiation是关键字。

关于c# - 使用 DirectShow.NET 的音频同步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10229176/

相关文章:

c# - Dotfuscator 是如何工作的?

c# - Azure 应用服务中具有不同用户权限的单个连接字符串

c# - 为什么这个公共(public)地址与以太坊签名不同?

ios - CloudKit iOS 9.0 didReceiveRemoteNotification 在 iOS 9.3 发布后未调用

c# - Excel 中的范围.替换

c# - 跨程序集移动的反序列化类型

c# - VB.NET 代码片段是否可用于 C#?

git - 如何在网络速度有限的两个遥远站点之间同步许多小文件?我可以使用 git 来加速这项工作吗?

c# - C# .NET 方法或习惯用法中 Objective-C 调度队列的等价物

c# - MVVM 卡住事件 Hook