因此,我一直在尝试找出一种方法来获取正在录制的视频帧的时间戳。
在线和 API 文档中的所有示例都告诉您使用 MediaRecorder 录制来自摄像机的视频。问题是没有返回时间戳数据,也没有在记录帧时调用回调。
我开始研究 Android 4.2 源代码中的相机应用程序,并在这方面取得了重大进展。我成功地从相机录制了视频,在调用 SurfaceTexture 的 onFrameAvailable 侦听器时将帧时间戳保存到文件中,因为 SurfaceTexture 具有时间戳属性。
不过,经过进一步调查,我发现我在显示框架时收到了这些回调,而不是在记录时。事后看来,这很有意义,我应该早点发现它。
无论如何,我继续深入到相机应用程序并开始查看它的 EffectsRecorder 类。我发现它通过过滤器框架使用了一些未记录的 API 来允许使用 OpenGL 着色器。对于我的用例,这很有帮助,所以我可能会继续沿着这条路走下去。我仍在尝试通过它来正确录制视频,但我觉得我仍然只会显示时间戳,而不是录制。
进一步看,我发现它使用了一个过滤器,该过滤器下面有一个 MediaRecorder 类,使用了一个未记录的第二个视频源,而不是相机,称为 GRALLOC_BUFFER = 2。这更加有趣和有用,但最终,我仍然需要时间戳正在录制的帧。
我正在呼吁 Stack Overflow,希望社区中有人遇到过这种情况。我只需要一个指向哪里的指针。我可以提供源代码,因为其中大部分是从 AOSP 中提取的,但我还没有提供,只是因为我不确定什么是相关的。
非常感谢您的帮助。