0

세로 모드 (android : screenOrientation = "portrait")로 고정 된 화면으로 안드로이드에서 MediaRecorder를 사용하여 비디오 스트리밍을 시도하고 있습니다. 카메라 하드웨어는 자연스럽게 가로 모드에 맞춰집니다. 로컬 미리보기가 세로 모드에서 올바르게 표시되도록 미리보기 비디오 디스플레이를 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가 캡처 한 비디오에 아무런 영향이없는 것으로 보인다 그러나 캡처 한 비디오는 여전히 90도이다. 내 타겟 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가있는 삼성 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()); 

은 호기심 당신에게

관련 문제