2013-07-18 2 views
12

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.

Antwort

5

Von Android 4.3 können Sie eine Surface als Eingabe für Ihren Encoder verwenden. http://developer.android.com/about/versions/android-4.3.html#Multimedia

Sie können also GLSurfaceView verwenden und die Filter mithilfe von Fragment-Shadern anwenden.

Hier finden Sie einige gute Beispiele. http://bigflake.com/mediacodec/

+0

Insbesondere DecodeEditEncodeTest ist ein CTS-Test, der das Decodieren eines Videos, das Ändern mit einem GLES-Shader und das erneute Codieren durchführt. – fadden

0

Es ist gut, die Exoplayer-Filterbibliothek zu verwenden, und diese wird Ihre Arbeit erledigen, aber um die gefilterte Ebene mit dem Video zusammenzuführen, müssen Sie eine zusätzliche Arbeit leisten.

Link for exoplayer Filter ist für Sie da: ExoplayerFilter

Sie müssen die exoplayer für diese se, sondern folgen Sie den Anweisungen werden Sie die Aufgabe tun können. Ping mich wenn etwas auftaucht.

Verwandte Themen