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

+0

@MikeGates何か効果があるかどうかを知るために、私は様々な価値を試していました。編集したスニペットを目的の値に戻してください。それを指摘してくれてありがとう。 – barkside

+0

この問題は解決しましたか? – mum

答えて

2

これを使用してみてください:

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

これは、 'java.lang.RuntimeException:setParameter failed。'というエラーが表示されます。 Android 2.3.3 – sgallego

+0

@sgallegoのSamsung Galaxy Sでは、mediaRecorder.prepare()の前に呼び出す必要があります。必要ならばreset()してください。 – harshitgupta

1

は、私はあなたの問題を知って、

ビデオCameraからMedia Recorderを使用し、あなたが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()); 

は好奇心から

関連する問題