MediaRecorder video-Aufnahme im Porträt-Modus
Ich bin versuchen, um eigene video-app. Iwork indem Sie die Einstellungen im manifest 2.2 (API 8).
Alles gut geht, aber ich verstehe nicht, warum das hochformat-video unterscheidet sich nicht von lanscape ein.
Machen die Erkennung des Geräts geändert Orientierung ich benutze diesen code in surfaceChanged()
if (mCamera != null) {
Camera.Parameters p = mCamera.getParameters();
try {
mCamera.stopPreview();
} catch (Exception e) {
//TODO: handle exception
}
int previewWidth = 0;
int previewHeight = 0;
if (mPreviewSize != null) {
Display display = ((WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay();
int rotation = display.getRotation();
switch (rotation) {
case Surface.ROTATION_0:
previewWidth = mPreviewSize.height;
previewHeight = mPreviewSize.width;
mCamera.setDisplayOrientation(90);
break;
case Surface.ROTATION_90:
previewWidth = mPreviewSize.width;
previewHeight = mPreviewSize.height;
mCamera.setDisplayOrientation(0);
break;
case Surface.ROTATION_180:
previewWidth = mPreviewSize.height;
previewHeight = mPreviewSize.width;
mCamera.setDisplayOrientation(270);
break;
case Surface.ROTATION_270:
previewWidth = mPreviewSize.width;
previewHeight = mPreviewSize.height;
mCamera.setDisplayOrientation(180);
break;
}
p.setPreviewSize(previewWidth, previewHeight);
mCamera.setParameters(p);
}
try {
mCamera.setPreviewDisplay(mHolder);
mCamera.startPreview();
} catch (Exception e) {
Log.d(TAG, "Cannot start preview.", e);
}
}
Funktioniert wie ein Charme. Wenn ich drehen, Gerät Oberfläche ändern Sie die Ausrichtung, den Aufruf surfaceChanged, wo die Kamera angebracht DisplayRotation.
Die Frage ist, wie man später selbst feststellen, wenn ein video aufgezeichnet wird entweder im lanscape-Modus oder im portrait ein. Da habe ich alle videos sind gefangen im Querformat. Es hängt nicht von setDisplayOrientation die beeinflussen nur die Vorschau-Prozess.
Erkunden auch das problem, das ich bemerkt, dass, wenn die Verwendung von standard-Kamera-app schreibt es spezielle Tags, um video-Datei (gesehen in MediaInfo): Rotation : 90 für die portrait-Aufnahme.
Aber MediaRecorder-Klasse nicht.
Scheint, dass ist das problem. Hat jemand um dieses Problem zu lösen?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gefunden !
In der Tat, ändern Sie die Vorschau-Tags haben, können Sie die video, aber es gibt keinen Weg, um wirklich ändern Sie die video... (vielleicht auch ein speed-Problem oder etwas)
Drehen Sie die Vorschau, dann
Tags, die video -, als hätten Sie eine 90° - Drehung, dann wird das Telefon automatisch drehen, wenn das Lesen.
So alle Sie tun müssen ist,
Hoffe es hilft 😉
onCreate
Methode der Klasse implementierenSurfaceHolder.Callback
ich diesen code:mCamera = Camera.open(); mCamera.setDisplayOrientation(90); mCamera.unlock();
gefolgt vonmediaRecorder = new MediaRecorder(); mediaRecorder.setCamera(mCamera);
. Arbeitete wie ein Charme!Kamera.setDisplayOrientation(90) funktioniert nicht in allen Geräten. Folgende Lösung funktioniert perfekt in verschiedene Geräte und auch die Handhabung marshmallow Laufzeit Berechtigung.
Nun bereiten-media-Rekorder mit der richtigen rotation, so dass aufgezeichnete video-Wiedergabe in der richtigen Ausrichtung.
private boolean prepareMediaRecorder() {
Können Sie download der gesamten Stichprobe https://github.com/umesh-kushwaha/Android_Video_Recording_portrait