私はビデオ処理を行うためにOpenGLES3.0を使用しています。 Android MediaExtractor
とMediaCodec
APIをSurfaceテクスチャと一緒に使用して動画からフレームを取得することができました。AndroidでOpengles3.0を使用したサーフェステクスチャ
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
であっても、すべてのフレームではなくキーフレームしか取得できませんでした。