C++ 使用samplegrabber过滤器的音频/视频同步问题
我正在使用DirectShow播放电影。我修改视频/音频数据,并在我的应用程序中自己渲染所有内容。因此,我使用的是SampleGrabber过滤器和空渲染器 当我倒带电影(使用IMediaSeeking界面)时,问题出现了——音频明显滞后于视频(几秒钟的滞后) 我了解a/v同步的基本知识和时间戳。我知道渲染过滤器可以根据显示时间删除帧C++ 使用samplegrabber过滤器的音频/视频同步问题,c++,directshow,samplegrabber,audio-video-sync,C++,Directshow,Samplegrabber,Audio Video Sync,我正在使用DirectShow播放电影。我修改视频/音频数据,并在我的应用程序中自己渲染所有内容。因此,我使用的是SampleGrabber过滤器和空渲染器 当我倒带电影(使用IMediaSeeking界面)时,问题出现了——音频明显滞后于视频(几秒钟的滞后) 我了解a/v同步的基本知识和时间戳。我知道渲染过滤器可以根据显示时间删除帧 但我猜SampleGrabber过滤器只是接收所有数据?是否有可能在我的SampleCB回调中获得已同步的音频/视频数据?在示例抓取器回调中,您将收到数据时间戳
但我猜SampleGrabber过滤器只是接收所有数据?是否有可能在我的SampleCB回调中获得已同步的音频/视频数据?在示例抓取器回调中,您将收到数据时间戳。如果您保留获得的时间戳,并确保使用这些时间戳同步数据播放,以便在任何时候在所有流上播放具有相同时间戳的数据,那么您的同步将保持良好状态
样本抓取器接收所有数据,但这并不意味着这些数据以同步顺序到达抓取器。匹配时间戳是绝对必要的。由于视频可能是暂时压缩的,而音频通常不是,因此您的搜索可能会在视频段上获得额外的预滚数据,您可能没有正确处理这些数据。谢谢您的解释。我刚刚修改了回调,所以我可以在VideoCallback::SampleCB方法中接收当前的音频时间戳。我只是对视频帧不做任何处理,如果(videoEndTime