22

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

+0

, что о наборе 'андроида: screenOrientation =" пейзаж "вашей CameraActivity в манифесте – IgniteCoders

ответ

16

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

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

+7

'mediaRecorder.setOrientationHint' изменяет ориентацию выходного видео, а не ориентацию предварительного просмотра. – Cat

+3

Кроме того, 'setOrientationHint' работает только для потоков MPEG4. Другие (например, MPEG2TS) не реализуют этот параметр (он бесшумно игнорируется). – Lekensteyn

+0

@ Кат вы правы, любая идея о том, как исправить это на предварительном просмотре? !! –

6

Посмотрите на документацию здесь

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(); 

    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 

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

+1

этот код не удастся, ЕСЛИ вы не вызываете 'mCamera.unlock();' before' recorder.setCamera (mCamera) ': http://developer.android.com/reference/android/hardware/Camera.html#unlock() – Cat

3

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

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

+0

хорошо ... отлично работает! Спасибо! – Antonio

+2

фактически не поворачивает видео для правильной ориентации, это всего лишь флаг, установленный на видео, которое некоторые медиаплееры, такие как vlc, игнорируют. – Nima

6

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

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)); 
1
mMediaRecorder = new MediaRecorder(); 
     mServiceCamera.setDisplayOrientation(90); 
     mMediaRecorder.setOrientationHint(90); 
     mServiceCamera.unlock(); 
     mMediaRecorder.setCamera(mServiceCamera); 
     mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
     mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH));