【发布时间】:2014-10-31 22:27:20
【问题描述】:
谁能简要解释一下当我的自定义捕获过滤器不显示时钟时,DirectShow DirectSound Audio Renderer 如何以及为什么会调整速率?
我完全无法理解它。当音频开始时,我将 rtStart 分配为零加上样本的持续时间(numbytes / m_wfx.nAvgBytesPerSec)。那么下一个样本的开始时间就是上一个样本的结束时间,以此类推....
一段时间后,捕获过滤器检测到 Directshow 消耗样本的速度过快,并尝试设置未来某个时间的时间戳,音频渲染器完全忽略了该时间戳。作为测试,我可以突然告诉一个样本,它必须在 20 秒后才能渲染(StreamTime() + UNITS),然后渲染器再次忽略它。但是,Null Audio Renderer 会按照它的指示进行操作,整个图表会冻结 20 秒,这是预期的行为。
然后,简而言之,我希望音频渲染器使用我的捕获时钟(或它自己的,或图表的,我不在乎),但我确实需要它来遵守我发送给它的时间戳。我需要它做的是非常巧妙地挤压或拉伸样本,以弥补 DSound 和迎面而来的流之间的速率差异(我无法控制其速率)。
【问题讨论】:
标签: audio time directshow renderer rate