0

我試圖在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

回答

2

嘗試使用這樣的:

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

1

我知道您的問題,

視頻使用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()); 

謝謝