2013-11-10 3 views
0

У меня есть функция в приложении, предназначенная для записи определенной длины видео с помощью фронтальной камеры.Android - Записанное видео разориентировано

Запись в порядке, однако неправильная ориентация. Я искал много времени, но многие вопросы этого упоминаются только на картинке

части, которая, связанную с камерой и MediaRecorder представлены ниже

public void onCreate(Bundle savedInstanceState) { 
    // Some of the codes are not shown 
    getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, 
      WindowManager.LayoutParams.FLAG_FULLSCREEN); 
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); 
    recorder = new MediaRecorder(); 
    holder = cameraView.getHolder(); 

} 
private void initRecorder() { 
    recorder.setCamera(camera); 
    recorder.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 
    recorder.setVideoSource(MediaRecorder.VideoSource.DEFAULT); 
    CamcorderProfile cpLow = CamcorderProfile.get(1, 
      CamcorderProfile.QUALITY_LOW); 
    recorder.setProfile(cpLow); 
    mFileName = Environment.getExternalStorageDirectory().getAbsolutePath(); 
    mFileName += "/youraudiofile.mp4"; 
    recorder.setOutputFile(mFileName); 
    recorder.setMaxDuration(50000); 
    recorder.setMaxFileSize(5000000); 
} 
private void prepareRecorder() { 
    recorder.setPreviewDisplay(holder.getSurface()); 
    try { 
     recorder.prepare(); 
    } catch (IllegalStateException e) { 
     e.printStackTrace(); 
     finish(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
     finish(); 
    } 
} 
public void surfaceCreated(SurfaceHolder holder) { 
camera = Camera.open(findFrontFacingCamera()); 
camera.unlock(); 
initRecorder(); 
prepareRecorder(); 

} 

Вышеуказанные коды работают, и во время записи я могу получить экран, как этот record http://img201.imageshack.us/img201/5264/3soh.jpg

Вместо этого, полученное видео будет отображаться как этот result http://img690.imageshack.us/img690/6783/wy29.jpg

Как correc Это?

ответ

2

Вы, вероятно, следует использовать это:

recorder.setOrientationHint(CamOrientationDegrees); 

где «CamOrientationDegrees» является угол устройства в начале записи. Я нашел, что это работает на большинстве устройств, кроме Samsung S3. S3 игнорирует его и ориентирует видео в соответствии с ориентацией устройства, что делает неправильный угол воспроизведения неправильным при воспроизведении (например, VLC) (я до сих пор не понял, как с этим справиться!).

Если вы не используете это на S3, он должен работать нормально, если вы правильно вычислите «CamOrientationDegrees», учитывая тот факт, что он использует фронтальную камеру (вам может потребоваться немного поэкспериментировать с ним).

CamOrientationDegrees должен принимать только значения 0, 90, 180 или 270.

0

Видео всегда записывается, как если бы устройство находилось в альбомной ориентации, даже если устройство находится в портретной ориентации.

Есть способы, по которым вы можете обработать видео, чтобы переориентировать его (например, ffmpeg), хотя я не экспериментировал с ними, и они являются сторонними библиотеками, а не частью Android SDK.

Смежные вопросы