Ich versuche eine App zu erstellen, wo ich Filter zu einem aufgezeichneten Video hinzufügen kann. Im Grunde möchte ich die Funktionalität in Instagram Video oder Viddy replizieren.Android Videofilter
Ich habe Forschung gemacht und ich kann nicht alles zusammenstückeln. Ich habe mit GLSurfaceView nachgedacht, um das aufgezeichnete Video abzuspielen, und ich weiß, dass ich NDK verwenden könnte, um die Pixelmanipulation durchzuführen und sie an das SurfaceView zurückzusenden oder es irgendwie zu speichern. Das Problem ist, ich weiß nicht, wie man die Pixeldaten sendet, weil es anscheinend keine Funktion gibt, um darauf zuzugreifen. Diese Idee stammt von der Kamera-Funktion "onPreviewFrame". Die Funktion gibt ein Byte-Array zurück, mit dem ich die Pixel manipulieren und anzeigen kann.
Eine andere Idee ist, GLSurfaceView zu verwenden und OpenGL zu verwenden, um den Filter zu rendern. GLSurfaceView hat einen Renderer, den Sie einstellen können, aber ich bin mit OpenGL nicht vertraut. Aber auch hier geht es darum, die Pixel jedes Videoframes tatsächlich zu erhalten. Ich habe auch gelesen, dass ich jeden Frame als Textur riss und dann die Textur in OpenGL manipuliere, aber die Antworten, auf die ich gestoßen bin, sind nicht sehr detailliert.
Zuletzt habe ich in JavaCV untersucht. Ich versuche, FFmpegFrameGrabber zu benutzen, aber ich habe auch nicht viel gehabt. Ich wollte nur einen Frame aufnehmen, aber wenn ich versuche, den ByteBuffer des Frames in ein ImageView zu schreiben, erhalte ich einen "Puffer nicht groß genug für Pixel" -Fehler.
Jede Anleitung wäre großartig.
Insbesondere DecodeEditEncodeTest ist ein CTS-Test, der das Decodieren eines Videos, das Ändern mit einem GLES-Shader und das erneute Codieren durchführt. – fadden