我使用OpenGLES3.0进行视频处理。
我发现通过使用Android MediaExtractor
和MediaCodec
API以及Surface纹理,可以从视频中获取帧,如下所示。
glGenTextures( 1, &textureId );
glBindTexture(GL_TEXTURE_EXTERNAL_OES, textureId);
glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameterf(GL_TEXTURE_EXTERNAL_OES, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
glBindTexture(GL_TEXTURE_EXTERNAL_OES, 0);
但GLES3.0中没有这样的API。
我的问题是:OpenGLES3.0中是否有相关的API来生成和使用表面纹理?或者Android中是否有其他API可以从视频中获取所有帧?
我在getFrameAtTime()
和MediaMetadataRetriever
中尝试FFmpegMediaMetadataRetriever
,但我只能获得关键帧而不是所有帧,即使使用MediaMetadataRetriever.OPTION_CLOSEST
也是如此。
答案 0 :(得分:0)
似乎在3.0中仍然可以使用1.1或2.0扩展。因此,要使用GL_TEXTURE_EXTERNAL_OES
,您只需要包含gl2ext.h
。