Ich verwende OpenGLES3.0, um Videoverarbeitung zu tun. Ich habe festgestellt, dass es möglich ist, Frames von einem Video mit Android MediaExtractor
und MediaCodec
API zusammen mit Oberflächenstruktur, wie unten zu bekommen.Oberflächenstruktur mit OpenGL3.0 auf Android
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);
Aber es gibt keine solche API in GLES3.0.
Meine Frage ist: gibt es eine relevante API in OpenGLES3.0 zu generieren und Oberflächenstruktur zu verwenden? Oder gibt es noch andere APIs in Android, um alle Frames von einem Video zu erhalten?
Ich versuchte getFrameAtTime()
in MediaMetadataRetriever
und FFmpegMediaMetadataRetriever
, aber ich konnte nur die Schlüsselrahmen und nicht alle Rahmen, auch mit MediaMetadataRetriever.OPTION_CLOSEST
.