我有一个过滤器图表,它接收原始音频和视频输入,然后使用ASF Writer将它们编码为WMV文件。
我编写了两个自定义推送源过滤器来为图形提供输入。音频过滤器仅在环回模式下使用WASAPI来捕获音频并向下游发送数据。视频滤镜采用原始RGB帧并将其发送到下游。
对于音频和视频帧,我都有捕获帧时的性能计数器值。
问题1:如果我想为视频和音频添加正确的时间戳,我是否需要创建一个使用性能计数器的自定义参考时钟,或者是否有更好的方法让我同步两个输入,即计算流时间?
视频输入是从其他地方的Direct3D缓冲区捕获的,我无法保证帧速率,因此它的行为类似于实时源。当然,我总是知道一帧的开始时间,但我怎么知道结束时间?
例如,假设视频滤镜理想情况下需要以25 FPS运行,但由于延迟等原因,帧1在1 / 25th标记处完美启动,但帧2的开始时间晚于预期的2/25标记。这意味着图表中现在存在间隙,因为第1帧的结束时间与第2帧的开始时间不匹配。
问题2:下游过滤器是否知道如何处理第1帧和第2帧之间的延迟,或者我是否需要手动减少第2帧的长度?
答案 0 :(得分:1)
System Reference Clock
生成时间戳 - 无论如何,这比直接使用性能计数器作为时间戳源更可取。