2013-04-23 8 views
9

Hallo Android Video Experten :)Wie kann ich Videos mit niedriger Auflösung auf Android auf einer Reihe von Geräten zuverlässig erfassen?

ich eine Android-Anwendung entwickle, die dem Anwender Video erfassen können und laden Sie es auf einem Remote-Server (es als mehr beteiligt ist, 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 hatte, was nur als ein kompletter Albtraum beschrieben werden kann, der versucht, Video mit einer vernünftig niedrigen Bitrate zuverlässig über eine Reihe von Android-Geräten zu erfassen.

Wie ich es verstehe, gibt es zwei Möglichkeiten, Videos auf Android erfassen:

1) Mit dem Media Recorder/Kamera-API

2) ein Intent Verwenden der Kameras Video-Capture-Anwendung zu öffnen

Option 1) bietet die größte Flexibilität und ermöglicht uns eine einfache Änderung der Aufnahmeauflösung. 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 (andere App) scheint Media Recorder zu verwenden, hat aber viele schlechte Kritiken für Video-Crash oder funktioniert nicht.

Option 2) funktioniert gut über eine Reihe von Geräten, da es 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.

Also das ist, wo ich bin. Ich habe lange gesucht und nach Antworten gesucht, aber ich kann nicht herausfinden, wie man Videos mit niedriger Auflösung zuverlässig mit Android aufnimmt.

Jede Hilfe sehr geschätzt!

Matthew

+0

Haben Sie Probleme gefunden? Ich versuche die Option 2 und fest auf der Suche nach Antworten .... – Salmaan

Antwort

0

Ich glaube, Sie getSupportedPictureSizes verwenden können die minimun unterstützte Größe in jeder Handy-Kamera zu erhalten, und nachdem Sie mediaRecorder mit diesen Parameter in SetVideoSize(width, height)

+0

Danke Alvaro, aber das macht die Media Recorder API nicht weniger crashy – MisterMat

1

verwenden können, wenn Sie API 18 Ziel und, können Sie Verwenden Sie Camera und MediaCodec zusammen, um mit einer beliebigen Größe und Bitrate aufzunehmen. Siehe zum Beispiel die Aktivität "Show + Capture-Kamera" in Grafika.

Sie können die platform version dashboard überprüfen, um die Größe des Zielmarktes auf einer bestimmten API-Ebene zu schätzen.

2

Sie können genau festlegen, dass in der MediaRecorder Klasse von Rahmengröße Einstellung (width x height) muss die Methode der setVideoSize(int width, int height), desto kleiner die Bildgröße desto geringer ist das Video, das für alle Android-Handys gilt, werden Sie nicht Frame-Größe ändern müssen pro Gerät, oder Sie könnten die Bitrate codieren, dies steuert die Komprimierungsqualität jedes Frames. Verwenden Sie die Methode setVideoEncodingBitRate (int bitRate), da die niedrigere Bitrate zu einer höheren Komprimierung führt, was wiederum zu geringerer Qualität und geringerer Videodateigröße führt. Sehen Sie sich die Klasse MediaRecorder gut an.

Verwandte Themen