2016-04-11 9 views
0

Ich arbeite an einer App, wo ich ein Video aufnehmen muss, die in Portrait View speziell sein soll und spielen Sie in Portrait View als Gut. Ich verwende mediaRecorder, um das Video aufzunehmen.Android Video aufgezeichnet mit MediaRecorder und Oberflächenansicht nicht im Querformat spielen, obwohl in Portrait aufgenommen

haben diese Website als Referenz verwendet: https://examples.javacodegeeks.com/android/core/android-video-capture-example/

und machte leichte Veränderungen meinen Anforderungen gerecht zu werden:

Hier ist der Code:

Für die Kamera benutze ich diese Einstellungen:

mCamera = Camera.open(findFrontFacingCamera()); 
      mCamera.setDisplayOrientation(90); 
      Camera.Parameters params= mCamera.getParameters(); 
      params.set("rotation", 90); 
      params.set("orientation", "portrait"); 
      mCamera.setParameters(params); 
      mPreview.refreshCamera(mCamera); 

Das Problem, mit dem ich gerade konfrontiert bin, ist, dass Video aufgezeichnet wird (was scheint) in Portrait View aber wenn ich p lege es mit irgendeinem Player für zB. MX Player Ich erhalte ein Video, das in Landscape View aufgenommen/wiedergegeben wird.

Hier sind die Bildschirme als Referenz:

The recording Screen

Das Video gespielt: enter image description here

Ich habe den setDisplayOrientation(90) Parameter aber es funktioniert nicht verwendet. Wie erreiche ich, dass ich versuche zu erreichen?

Antwort

1

Im Gegensatz zur iOS-Kamera können wir die Orientierung der Hochformat-Kamerarahmen auf Android nicht wirklich auswählen.

Camera.setDisplayOrientation() bezieht sich nur auf die Ausrichtung der Live-Video-Vorschau von der Kamera; Die tatsächlichen Rahmendaten werden niemals auf Android-Geräten rotiert. Sie können es sehen, wenn Sie eine onPreviewFrame() Callback verwenden. Camera.setRotation() wirkt sich nur auf den Rückruf onPictureTaken() aus, und auf den meisten Geräten wird nur ein EXIF-Flag gesetzt.

Die explizite Einstellung von "Rotation" und "Ausrichtung" ist gefährlich: Einige Geräte können diese Schlüssel erkennen, andere werden sie ignorieren, während andere ROMs eine RuntimeException auslösen, wenn die Camera.setParameters() Parameter mit unerwartetem Schlüssel oder Wert empfangen werden . Aber auf jeden Fall habe ich noch nie ein Android-Gerät gesehen, das die aufgezeichneten Video-Frames bei irgendwelchen Flags verändert.

Sie haben die MediaRecorder.setOrientationHint() API, aber es wird nicht die Frames des aufgenommenen Videos drehen, nur ein Flag in den Video-Header.

Also, leider müssen Sie das Video auf der Empfängerseite drehen. Dies hängt davon ab, wie Sie Ihr Video rendern, und ja, Sie können den Orientierungshinweis überprüfen, wenn Sie möchten.

+0

Irgendwelche Vorschläge, wie ich es alleine machen kann? Jede Bezugsquelle, die Sie kennen? –

+0

Ich habe auch setOrientationHint() verwendet, aber es funktioniert immer noch nicht. –

+0

was meinst du "nicht funktioniert"? Überprüfen Sie diese Flagge auf dem Empfänger? –

Verwandte Themen