Immer ein frame von SurfaceView
Die Schwierigkeit, das ich jetzt habe ist ein screenshot von der SurfaceView. Könnte sich jemand bitte helfen?
Mein team ist dabei, ein Android-Projekt, wo wir MediaCodec zu decodieren und die video-feed und machen das füttern auf eine Oberfläche.
Die Aktivität implementiert
SurfaceHolder.Callback
Dann haben wir eine SurfaceView und fügen Sie den Rückruf:
mySurfaveView.getHolder().addCallback(this);
Dann beginnen wir decodieren der video-feed-in (wir haben eine Methode, die die Dekodierung)
surfaceChanged(SurfaceHolder holder, int format, int width, int height)
Das video funktioniert Prima, jetzt möchte ich mit screenshot von dem, was gerendert wird auf die SurfaceView. Ich habe versucht, mehrere Möglichkeiten, dies zu tun, aber ich wollte nicht gelingen. Folgenden sind das, was ich versucht habe:
- Ich habe müde immer rootView ist drawingcache.
- Versuchte, den Rahmen direkt von MediaCodec.
- Versucht die Methode draw() zum zeichnen auf eine Leinwand.
Als jetzt ich bin tring, um eine benutzerdefinierte SurfaceView und überschreiben der onDraw-Methode. Allerdings habe ich nie erstellt eine benutzerdefinierte SurfaceView. Bin ich auf die richtige Richtung?
Hilfe bitte. Danke!
InformationsquelleAutor Chen | 2015-04-16
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie nicht erfassen, eine SurfaceView, wie in diesem andere Frage.
SurfaceViews wird selten außer Kraft setzen möchten
onDraw()
. Im Allgemeinen die Ansicht Teil der SurfaceView ist ein transparentes Loch.Für den speziellen Fall der MediaCodec-Ausgang, haben Sie ein paar Möglichkeiten. Sie können die Ausgabe in eine SurfaceTexture, und dann machen Sie die video-frame zweimal mit OpenGL ES. Einmal, um die SurfaceView für die Anzeige, die einmal in einen off-screen-Puffer, aus dem Sie erfassen können, die Pixel.
Ein anderer Ansatz ist der Austausch der SurfaceView mit einem TextureView, und verwenden Sie dann die
getBitmap()
Aufruf schnappen Sie video-frames.Verschiedene Beispiele finden sich in der Grafika.
könnten Sie die Beispiel-code, wie Sie ersetzen
TextureView
mitsurfaceView
? dieMediaCodec.configure
Funktion nur erhaltenSurfaceObject
als Eingang und ich habe keine Ahnung, wie und wo könnte ich es ersetzen mitTextureView
InformationsquelleAutor fadden