Android上捕获的视频不会旋转为纵向

时间:2012-01-13 13:59:08

标签: android rotation android-camera mediarecorder android-orientation

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

   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。

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

2 个答案:

答案 0 :(得分:2)

尝试使用:

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

答案 1 :(得分:1)

我知道你的问题,

来自Media Recorder的视频使用Camera,因此您需要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());

谢谢