Hallo Android Video-Experten:)
Ich entwickle eine Android-Anwendung, die es dem Benutzer ermöglicht, Videos zu erfassen und sie auf einen entfernten Server hochzuladen (es ist komplizierter als das, aber der Rest der App ist nicht wichtig). Wegen der Upload-Anforderung ist es wichtig, dass das Video eine vernünftige Größe hat, also keine super hohe Auflösung. Sagen wir ein Maximum von 680x480 oder 10Mb / Minute. Dies ist kein Problem auf Apple-Geräten.
Ich habe etwas erlebt, was man nur als einen vollständigen Albtraum beschreiben kann, der versucht, Video mit einer vernünftigen niedrigen Bitrate zuverlässig über eine Reihe von Android-Geräten aufzunehmen.
Wie ich es verstehe, gibt es zwei Möglichkeiten, Video auf Android aufzunehmen:
1) Verwenden der Media Recorder / Camera API
2) Verwenden einer Absicht zum Öffnen der Kamera-Videoaufnahmeanwendung
Option 1) bietet die größte Flexibilität und ermöglicht es uns, die Aufnahmeauflösung einfach zu ändern. Allerdings ist die Android Camera API auf einer Reihe von Geräten NICHT zuverlässig, und ich habe sehr gute Informationen (auch von jemandem, der mit Google über dieses Problem gesprochen hat), dass wenn man Video mit dieser API aufnimmt, es bei gut 50% abstürzt die Geräte da draußen. Es gibt einen Grund, dass Zoom Camera FX einen Intent für die Videoaufnahme verwendet. Zoom-Kamera (verschiedene App) scheint Media Recorder zu verwenden, hat aber viele schlechte Kritiken für Video-Absturz oder funktioniert nicht.
Option 2) funktioniert gut über eine Reihe von Geräten, da sie die integrierte Anwendung auf dem Gerät verwendet. Das Problem ist, dass Sie keinerlei Kontrolle über die Auflösung haben, es gibt einen Qualitätshinweis auf die Absicht, aber die Kamera-App wird dies normalerweise ignorieren. Mein Samsung Galaxy S3 zeichnet Videos standardmäßig mit etwa 2 MB / s auf. Das ist viel zu hohe Auflösung. Die eingebaute Anwendung kann natürlich die Auflösung ändern, aber dies beruht auf einer schwer zu kontrollierenden Aktion des Benutzers.
Ich verstehe, dass ich eine Bibliothek wie ffmpeg verwenden könnte, um die Auflösung des Videos nach der Aufnahme zu ändern. Dies erfordert jedoch, dass ich die Bibliothek für Android kompiliere, und ich wurde auch darüber informiert, dass, um die Codecs decodieren / kodieren auf dem Gerät legal zu verwenden, Sie Lizenzgebühren zahlen müssen, die etwa $ 1 pro Kopie der App betragen. Da diese App kostenlos verwendet werden kann, ist dies keine Option.
Hier bin ich also. Ich habe lang und hoch nach Antworten gesucht, aber ich kann nicht herausfinden, wie man mit Android niedrigauflösende Videos zuverlässig aufnimmt.
Jede Hilfe sehr geschätzt!
Matthäus
Sie können genau das in der Klasse MediaRecorder
definieren, indem Sie Frame-Größe (width x height)
, Methode setVideoSize(int width, int height)
, je kleiner die Frame-Größe, desto kleiner das Video, dies gilt für alle Android-Handys, werden Sie nicht Sie müssen die Framegröße pro Gerät ändern, oder Sie können die Bitrate codieren, dies steuert die Komprimierungsqualität jedes Frames. Verwenden Sie die Methode setVideoEncodingBitRate (int bitRate)
. Die niedrigere Bitrate führt zu einer höheren Komprimierung, was wiederum zu einer niedrigeren Qualität und einer niedrigeren Videodateigröße führt. Sehen Sie sich die MediaRecorder
-Klasse gut an.
Wenn Sie API 18 und höher als Ziel verwenden, können Sie Camera
und MediaCodec
zusammen verwenden, um mit einer beliebigen Größe und Bitrate aufzunehmen. Sehen Sie sich zum Beispiel die Aktivität "Show + Kamera aufnehmen" in Grafika an.
Sie können das Plattformversion-Dashboard überprüfen, um die Größe des Zielmarkts für eine bestimmte API zu schätzen Ebene.
Ich denke, Sie können getSupportedPictureSizes um die minimal unterstützte Größe in jeder mobilen Kamera zu erhalten und nachdem Sie mediaRecorder mit diesen Parametern in SetVideoSize (Breite, Höhe)
Tags und Links android video ffmpeg video-capture