微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

更快的 SurfaceTexture.onFrameAvailable 回调

如何解决更快的 SurfaceTexture.onFrameAvailable 回调

我正在编写一些代码,使用 OpenGL 为现有视频添加水印。

我从 Grafika 中的 ContinuousCaptureActivity 获取了大部分代码 - https://github.com/google/grafika/blob/master/app/src/main/java/com/android/grafika/ContinuousCaptureActivity.java

我没有使用相机在 SurfaceTexture 上进行渲染,而是使用 MoviePlayer 类,该类也存在于 Grafika 中。此外,我没有渲染随机框,而是渲染水印。

我以全速运行 MoviePlayer,即在解码帧后立即从源读取并渲染到表面。这可以在 2 秒或更短的时间内完成 30 秒的视频。

现在问题来自 onFrameAvailable 回调。它仅在 MoviePlayer 类每渲染 4 或 5 帧后调用一次。这使我在输出视频中丢失了帧。现在,如果我让 MoviePlayer 线程进入睡眠状态,直到调用相应的 onFrameAvailable,一切都很好,不会丢失任何帧。但是,现在处理我 30 多岁的视频大约需要 5 秒。

我的问题是如何使 SurfaceTexture 更快?或者是否有一些完全不同的方法需要我研究?

请注意,我不需要在屏幕上呈现任何内容

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。