Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用samplegrabber过滤器的音频/视频同步问题_C++_Directshow_Samplegrabber_Audio Video Sync - Fatal编程技术网

C++ 使用samplegrabber过滤器的音频/视频同步问题

C++ 使用samplegrabber过滤器的音频/视频同步问题,c++,directshow,samplegrabber,audio-video-sync,C++,Directshow,Samplegrabber,Audio Video Sync,我正在使用DirectShow播放电影。我修改视频/音频数据,并在我的应用程序中自己渲染所有内容。因此,我使用的是SampleGrabber过滤器和空渲染器 当我倒带电影(使用IMediaSeeking界面)时,问题出现了——音频明显滞后于视频(几秒钟的滞后) 我了解a/v同步的基本知识和时间戳。我知道渲染过滤器可以根据显示时间删除帧 但我猜SampleGrabber过滤器只是接收所有数据?是否有可能在我的SampleCB回调中获得已同步的音频/视频数据?在示例抓取器回调中,您将收到数据时间戳

我正在使用DirectShow播放电影。我修改视频/音频数据,并在我的应用程序中自己渲染所有内容。因此,我使用的是SampleGrabber过滤器和空渲染器

当我倒带电影(使用IMediaSeeking界面)时,问题出现了——音频明显滞后于视频(几秒钟的滞后)

我了解a/v同步的基本知识和时间戳。我知道渲染过滤器可以根据显示时间删除帧


但我猜SampleGrabber过滤器只是接收所有数据?是否有可能在我的SampleCB回调中获得已同步的音频/视频数据?

在示例抓取器回调中,您将收到数据时间戳。如果您保留获得的时间戳,并确保使用这些时间戳同步数据播放,以便在任何时候在所有流上播放具有相同时间戳的数据,那么您的同步将保持良好状态


样本抓取器接收所有数据,但这并不意味着这些数据以同步顺序到达抓取器。匹配时间戳是绝对必要的。由于视频可能是暂时压缩的,而音频通常不是,因此您的搜索可能会在视频段上获得额外的预滚数据,您可能没有正确处理这些数据。

谢谢您的解释。我刚刚修改了回调,所以我可以在VideoCallback::SampleCB方法中接收当前的音频时间戳。我只是对视频帧不做任何处理,如果(videoEndTime