как изменить ориентацию видео в MediaRecorder на книжную

Когда я записываю видео с помощью MediaRecorder, он всегда записывает в ландшафтном режиме, независимо от реальной ориентации устройства. Как заставить MediaRecorder/Camera использовать реальную ориентацию?


person Vladimir Berezkin    schedule 10.10.2010    source источник
comment
как насчет набора android:screenOrientation="landscape" вашей CameraActivity в манифесте   -  person IgniteCoders    schedule 17.11.2016


Ответы (4)


см. Camera.Parameters.setRotation() для получения дополнительной информации.

Там есть пример, и вместо вызова setRotation(rotation) попробуйте вызвать mediaRecorder.setOrientationHint(rotation) при записи видео.

person artsylar    schedule 22.08.2011

Добавьте следующие две строки кода:

Camera.setDisplayOrientation(90); // use for set the orientation of the preview
mRecorder.setOrientationHint(90); // use for set the orientation of output video

до:

mRecorder.setCamera(mCamera);

Полный пример:

mRecorder = new MediaRecorder();

// Both are required for Portrait Video
mCamera.setDisplayOrientation(90);
mRecorder.setOrientationHint(90);

// Step 1: Unlock and set camera to MediaRecorder
mCamera.unlock();
mRecorder.setCamera(mCamera);

// Step 2: Set sources
mRecorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
mRecorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);

// Step 3: Set a CamcorderProfile (requires API Level 8 or higher)
mRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_480P));
person Sagar Aghara    schedule 24.12.2016

Взгляните на документацию здесь

http://developer.android.com/guide/topics/media/camera.html#capture-video

Самая распространенная ошибка в этом примере — setCamera(). КАМЕРУ ОБЯЗАТЕЛЬНО УСТАНОВИТЬ СРАЗУ ПОСЛЕ ИЗГОТОВЛЕНИЯ MediaRecorder иначе будут ошибки.

    Camera mCamera = getCameraInstance();
    // adjust the camera the way you need
    mCamera.setDisplayOrientation(90);

    MediaRecorder recorder = new MediaRecorder();

    mCamera.unlock();
    recorder.setCamera(mCamera);

    recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT);
    recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT);
    recorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));
    recorder.setOutputFile(filePath);

    // add any limits
    recorder.setMaxDuration(50000); // 50 seconds
    recorder.setMaxFileSize(5000000); // Approximately 5 megabytes 

Я надеюсь, что это поможет кому-то. Удачи!!

person Laith Alnagem    schedule 20.03.2012
comment
этот код не будет работать, ЕСЛИ вы не вызовете mCamera.unlock(); до recorder.setCamera(mCamera): developer.android .com/reference/android/hardware/ - person Cat; 11.05.2014

Я тоже застрял с этой проблемой раньше. Я обнаружил, что вы можете использовать функцию setOrientationHint. (API 9). Вызовите эту функцию перед вызовом MediaRecorder.prepare(). Вы можете настроить степень ориентации для вашего выходного видео.

Надеюсь поможет, удачи!

person tomelf    schedule 08.09.2012
comment
на самом деле не поворачивает видео для правильной ориентации, это просто флаг, установленный для видео, который некоторые медиаплееры, такие как vlc, игнорируют. - person Nima G; 15.10.2014