我正在我的应用程序中实现 SurfaceTexture.OnFrameAvailableListener 接口,因此我可以将视频帧用作 OpenGL 纹理。一切都按应有的方式进行设置,并且运行良好,但是 onFrameAvailable(SurfaceTexture surfaceTexture) 在几秒钟后停止被调用,实际上并且似乎冻结了 OpenGL 中的视频,因为没有通过 SurfaceTexture.updateTextImage 上传新的纹理数据。
我在 onFrameAvailable 中设置了一个标志,以便从 GL 线程进行 updateTextImage 调用,并且仅在需要时进行。目前,我在每次绘制调用时都将标志设置为 true,以便在跳过 onFrameAvailable 检查时每帧上传视频纹理数据。像这样,一切都按原样运行,但似乎效率低下,因为如果它仍然相同(电影帧)则不需要上传新的纹理数据。
AFAIK 没有内存泄漏,logcat 没有显示任何错误。此外,媒体播放器设置为循环播放,但问题发生在单次运行完成之前。
几秒钟后,什么会导致 onFrameAvailable 不再被调用?