我正在尝试使用 DirectShow 和ISampleGrabber
界面从网络摄像头捕获视频流。我想为每个抓取的帧获取时间戳。但是方法中的SampleTime
参数SampleCB(double SampleTime, IMediaSample *pSample)
始终为零。
为什么它可以为零?这个值是否取决于相机驱动程序的实现或其他?还有其他方法可以获取抓取帧的时间戳吗?
我正在尝试使用 DirectShow 和ISampleGrabber
界面从网络摄像头捕获视频流。我想为每个抓取的帧获取时间戳。但是方法中的SampleTime
参数SampleCB(double SampleTime, IMediaSample *pSample)
始终为零。
为什么它可以为零?这个值是否取决于相机驱动程序的实现或其他?还有其他方法可以获取抓取帧的时间戳吗?
如果您从预览引脚捕获,时间戳可能为零,或者通过 Smart Tee 过滤器从相机派生的预览腿。时间戳不为零,帧根本没有时间戳,Sample Grabber 过滤器无法区分这两种情况。
您可以使用GraphStudioNext的 Analyzer Filter 或使用DumpMediaSamples轻松验证时间戳。
在您的应用程序中,您首先对图形的精确拓扑感兴趣,哪些过滤器在上游连接到 Sample Grabber。您很可能需要更新代码以消除预览的使用。