我正在尝试使用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。
有关如何旋转捕获的视频的任何想法?或者甚至不可能?
答案 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());
谢谢