我正在使用 DirectShow 播放电影。我修改视频/音频数据并在我的应用程序中自行呈现所有内容。因此,我使用 SampleGrabber 过滤器和 NULL 渲染器。
当我倒回电影(使用 IMediaSeeking 界面)时出现问题 - 音频明显滞后于视频(滞后几秒)。
我了解 a/v 同步基础知识和时间戳。我知道渲染过滤器会根据呈现时间丢帧。
但我想 SampleGrabber 过滤器只是接收所有数据?是否可以在我的 SampleCB 回调中获取已同步的音频/视频数据?
最佳答案
在样本采集器回调中,您会收到带有时间戳的数据。如果您保留获得的时间戳,并且确保在任何时间在所有流上播放具有相同时间戳的数据方面使用这些时间戳同步数据播放 - 那么您的同步将保持良好状态.
样本采集器接收所有数据,但这并不意味着这些数据以同步顺序到达采集器。匹配时间戳是绝对必要的。由于视频可能会被暂时压缩而音频通常不会,因此您的搜索可能会在视频段上获取额外的预卷数据,而您可能没有正确处理这些数据。
关于c++ - 使用 samplegrabber 过滤器的音频/视频同步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23275035/