Android-Kamera-Aufnahme mit FFmpeg
Bin tryin' zu nehmen Vorschaubild generiert, die von der android-Kamera, und übergeben Sie die data[]
zu ffmpeg input pipe generieren, die eine flv-video.
Der Befehl, den ich verwendet wurde, war :
ffmpeg -f image2pipe -i pipe: -f flv -vcodec libx264 out.flv
Habe ich auch versucht zu zwingen, die input-format zu yuv4mpegpipe
und rawvideo
aber ohne Erfolg...
Das Standard-format der Vorschau-frame erzeugt durch android-Kamera ist NV21
.
Die Art und Weise bin invokin' ffmpeg ist durch die Process API
schreiben und die Vorschau auf die Bilder data[]
der Prozess stdin
...
Die onPreviewFrame()
definition ist wie folgt :
public void onPreviewFrame(byte[] data, Camera camera)
{
try
{
processIn.write(data);
}
catch(Exception e)
{
Log.e(TAG, FUNCTION + " : " + e.getMessage());
}
camera.addCallbackBuffer(new byte[bufferSize]);
}
processIn
verbunden ist, um die ffmpeg
Prozess stdin
und buffersize
berechnet auf der Grundlage der Dokumentation für addCallbackBuffer()
.
Gibt es etwas, das bin doin' falsch...?
Dank...
- könnten Sie erklären, wie Sie aufgerufen wird, der ffmpeg-Prozess mit der Prozess-api?
- Versuchen Sie niemals
camera.addCallbackBuffer(new byte[bufferSize])
: sollten Sie zurückkehren (d.h.addCallbackBuffer()
) die Daten - array, das Sie erhalten von der Kamera Rückruf.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Irgendwie haben es perfekt funktioniert...
Die Fehler, die zu sein schien happenin' wurde im Zusammenhang mit der
vcodec
von der Bild-stream.Scheint, dass ffmpeg enthält keine Bestimmung zu entschlüsseln
NV21
- format, Bilder oder Bild-stream.Für das konvertieren hatte die
NV21
- format Vorschaubild zuJPEG
und wie die Bilder mussten strömten in Echtzeit an dieffmpeg
Prozess ,die Umsetzung mussteOn the Fly
. Der nächste zuverlässige Lösung fürOn the Fly
Umstellung aufJPEG
war wie folgt :Und die
ffmpeg
Befehl verwendet wurde :processIn
. Dank