在Android上捕获的视频不会旋转到肖像

问题描述:

我试图在Android上使用MediaRecorder将视频流固定到肖像模式(android:screenOrientation =“portrait”)。相机硬件自然与横向模式对齐。我可以将预览视频显示旋转90度,以便在纵向模式下正确显示本地预览。然而,拍摄的视频仍然是90度:在Android上捕获的视频不会旋转到肖像

Camera mCamera; 
    MediaRecorder mMediaRecorder; 

    ... 

    mCamera.setDisplayOrientation(90); 
    mCamera.setPreviewDisplay(holder); 
    mCamera.startPreview(); 

    Parameters params = mCamera.getParameters(); 
    params.setRotation(90); 
    mCamera.setParameters(params); 
    mCamera.unlock(); 

    mMediaRecorder.setCamera(mCamera); 

的params.setRotation似乎有任何对拍摄的视频没有任何影响。我的目标API是Android 2.2。我的测试硬件是Android 3.1。

有关如何旋转捕获的视频的任何想法?或者甚至不可能?

+0

出于好奇,为什么'params.setRotation ...'经过180? 180度不会把它变成一个倒退的景观视图吗?它不应该是'params.setRotation(90)'? – Mxyk 2012-01-13 14:05:58

+0

@MikeGates我之前正在尝试各种值,看看有没有什么效果。已编辑片段回到所需的值。感谢您指出。 – barkside 2012-01-13 14:25:09

+0

你是否已经解决了这个问题? – mum 2014-01-06 09:41:24

尝试使用这样的:

mediaRecorder.setOrientationHint(rotation); // eg rotation=270 
+0

这给我一个错误'java.lang.RuntimeException:setParameter失败。'在三星Galaxy S Android 2.3.3 – sgallego 2012-03-28 11:50:11

+0

@sgallego你需要在mediaRecorder.prepare()之前调用它。重置()它,如果需要的话。 – harshitgupta 2016-05-18 22:49:31

我知道您的问题,

视频使用Media RecorderCamera,所以你需要rotate Media Recorder。使用下面的代码应该解决你的问题。

/** 
* 
* @param mMediaRecorder 
* @return 
*/ 
public static MediaRecorder rotateBackVideo(MediaRecorder mMediaRecorder) { 
    /** 
    * Define Orientation of video in here, 
    * if in portrait mode, use value = 90, 
    * if in landscape mode, use value = 0 
    */ 
    switch (CustomCamera.current_orientation) { 
     case 0: 
      mMediaRecorder.setOrientationHint(90); 
      break; 
     case 90: 
      mMediaRecorder.setOrientationHint(180); 
      break; 
     case 180: 
      mMediaRecorder.setOrientationHint(270); 
      break; 
     case 270: 
      mMediaRecorder.setOrientationHint(0); 
      break; 
    } 

    return mMediaRecorder; 
} 

前应prepare()添加方法:

// Step 5: Set the preview output 
    /** 
    * Define Orientation of image in here, 
    * if in portrait mode, use value = 90, 
    * if in landscape mode, use value = 0 
    */ 
    CustomCamera.mMediaRecorder = Utils.rotateBackVideo(CustomCamera.mMediaRecorder); 
    CustomCamera.mMediaRecorder.setPreviewDisplay(mCameraPreview.getHolder().getSurface()); 

谢谢