2013-09-22 5 views
5

Ich versuche eine Videoaufnahme-App zu erstellen, die Videos mit 24 FPS aufzeichnet. ich in einem Versuch, den folgenden Code bin mit dem FPS bis 24 zu sperren:Android - Ist es möglich, die Vorschaubildrate einer Kamera zu "sperren"?

Camera.Parameters params = mCamera.getParameters(); 
params.setPreviewFrameRate(24); 
params.setPreviewFpsRange(24000, 24000); 

Und auch die folgenden CamcorderProfile, die mit MediaRecorder verwendet wird:

CamcorderProfile ccp = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH); 
ccp.videoFrameRate = 24; 

Leider funktioniert es nur, wenn das Video wird bei schlechten Lichtverhältnissen aufgenommen, aber sobald ich nach draußen gehe, wenn Licht ist, beginnt das Video mit 30 FPS.

Kann die Bildrate auch bei hellem Tageslicht auf 24fps eingestellt werden?

Vielen Dank im Voraus!

+0

Darf ich fragen, warum Sie es bei 24fps sperren möchten? 29,97 FPS ist heute für die meisten Anwendungen viel häufiger. Ist das vielleicht etwas, das Sie serverseitig tun könnten? Ich kenne die Art deiner App nicht, es tut mir so leid, wenn diese Fragen keinen Sinn ergeben. – blindstuff

+0

Was ich erreichen möchte, ist eine filmähnliche Qualität. Ich habe festgestellt, dass Kameras eine viel höhere Qualität bei niedrigeren FPS erreichen. Es ist wirklich schwer zu erklären, aber wenn man ein 24-fps-Video anschaut und es mit einem 29-fps-Video vergleicht, sieht es auf eine bessere Weise anders aus. – MrByte

Antwort

0

Wahrscheinlich haben Sie den automatischen Weißabgleich und die automatische Belichtung nicht gesperrt. Die FPS kann von der Umgebung betroffen sein. Versuchen Sie setAutoExposureLock(true) und setAutoWhiteBalanceLock(true).

+0

Vielen Dank für Ihre Antwort, obwohl es in einer Situation (wenn das Video bei schwachem Licht aufgenommen wurde) funktioniert, ist es nur für bestimmte Situationen geeignet. Wenn der Benutzer zum Beispiel ein Video in seinem Haus aufnehmen möchte und dann bei Licht aussteigen möchte, zeigt die Kamera nur einen "weißen Bildschirm" an. Wenn der Benutzer das Video aufnimmt, wenn viel Licht vorhanden ist, sperrt der FPS 30 statt 24, wie ich es möchte. – MrByte

1
public List<Integer> getSupportedPreviewFrameRates() 

Überprüfen Sie diese Liste. Ich nehme an, dass Sie die Bildrate nicht einstellen können, die dort nicht aufgeführt ist. Es kann aufgrund von Codecs Änderung sein, die in Android OS verwendet werden.

+0

Vielen Dank für die Antwort. Ich habe die Werte überprüft und habe folgendes erhalten: 15000,30000 und 30000,30000.Mein Ziel ist es, die genaue Anzahl von 24 Bildern pro Sekunde zu erreichen. Daher habe ich angenommen, dass wenn ich die Werte auf 24000 ändere, es den Trick machen würde, da mein Gerät diesen Wert zwischen 15000 und 30000 unterstützt es ist unmöglich, etwas anderes als diese Werte zu verwenden, ist es tatsächlich unmöglich zu erreichen? – MrByte

1

ich würde vorschlagen, dass Sie einen Blick auf MediaRecorder haben: setCaptureRate (Doppel fps)

fps: - Rate, mit der Rahmen sollte für die Abfrage unterstützt in Bildern pro Sekunde

erfasst werden: - getPreviewFpsRange (int [])

Bitte beachten Sie, dass Ihre Kamera aufgrund von Kamera-/Encodereinschränkungen nicht garantieren kann, dass Bilder mit der angegebenen Rate aufgenommen werden.

+0

Vielen Dank für Ihre Antwort. Diese Funktion ist veraltet. Ich habe es auch ausprobiert, aber ich hatte keinen Erfolg. Ich versuche, die genaue Menge an fps zu erreichen, nicht mehr und nicht weniger. – MrByte

1

Aus eigener Erfahrung auf meinem Android, sehe ich eine Abhängigkeit zwischen FPS und Belichtung. Ich habe es nicht mit WhiteBalance überprüft, aber es ist auch möglich.

Dann, warum stellen Sie nicht die fps auf 24 oder einen anderen Wert, der zu einem Zeitpunkt 24fps ergibt. Dann überprüfen Sie kontinuierlich die aktuellen fps, und wenn es 24fps ist, dann setzen SieAutoExposureLock (true) (und auchAutoWhiteBalanceLock (true) nur für den Fall). Die fps ändern sich nicht mehr aufgrund von Änderungen in der automatischen Belichtung.

+0

Einfach und clever. Wie Sie sagten, spielt der Weißabgleich anscheinend auch bei FPS eine kleine Rolle. In meinem Fall hat das Locking der Belichtung bei einem etwas niedrigeren FPS den Zweck erfüllt. –