2012-03-19 1 views
3

비디오를 녹화 할 때 다양한 휴대 전화에서 내 응용 프로그램을 테스트했습니다. 내 응용 프로그램의 주요 기능은 전화 카메라를 통해 사진을 찍고 비디오를 녹화하는 것입니다. 대부분의 휴대 전화에서 문제가 발생하지 않았지만 Motorola DROID RAZR에이 문제가 발생했습니다. 사진을 찍을 때 내 응용 프로그램이 잘 작동합니다. 하지만 비디오를 녹화 할 때 문제가 있습니다. 비디오를 녹화 할 때 빈 화면이 나타납니다. 모바일 화면에 미리보기가 표시되지 않습니다. 나는 왜 그런 일이 일어나지 않지만, 대부분의 휴대 전화는 잘 작동한다. 그리고이 전화 (droid razr)에서 잘 작동하는 사진을 찍습니다. 모토로라 DROID RAZR의 구성Motorola DROID RAZR의 카메라 문제

,

  1. 운영 체제 : 안드로이드 v2.3.5.
  2. 카메라 : HD 카메라, 8MP.
  3. 프로세서 : TI의 OMAP4430 여기

내 코드는,

Camera camera = Camera.open(); 
Parameters params = camera.getParameters(); 
camera.setDisplayOrientation(90); 
camera.setParameters(params);    
camera.setDisplayOrientation(90); 

MediaRecorder recorder = new MediaRecorder(); 
recorder.setCamera(camera); 
recorder.setAudioSource(MediaRecorder.AudioSource.CAMCORDER); 
recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
recorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH)); 
recorder.setVideoSize(640, 480); 
recorder.setMaxDuration(25000); 
recorder.setOrientationHint(90); 

업데이트 :

내가 모토로라 모토로라 레이저 에뮬레이터에서이 응용 프로그램을 테스트했습니다. 다음과 같은 예외가 발생했습니다.

MediaRecorder(430): prepare failed: -17 
System.err(430): java.io.IOException: prepare failed. 
System.err(430): at android.media.MediaRecorder._prepare(Native Method) 
System.err(430): at android.media.MediaRecorder.prepare(MediaRecorder.java:590) 

하지만 다른 예외는 없습니다. 이 문제를 해결하는 방법은 무엇입니까?

+0

이 답변을 시도해 보셨습니까? http://stackoverflow.com/a/6135219/805031 그것은 다르지만 문제를 해결할 수 있습니다. 'Preview' 클래스를 사용합니까? – TryTryAgain

답변

3

마지막으로 해결책을 찾았습니다. 아래 코드는 모든 장치에서 잘 작동합니다. ;)

 Holder holder = getHolder(); 
     holder.addCallback(this); 
     holder.setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); 
     Camera camera = Camera.open(); 
     try { 
      camera.setPreviewDisplay(holder); 
      camera.startPreview(); 
     } catch (IOException e) { 
      Log.e(TAG, e.getMessage()); 
      e.printStackTrace(); 
     } 

     camera.unlock(); 
     MediaRecorder recorder = new MediaRecorder(); 
     recorder.setCamera(camera); 
     recorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
     recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA); 
     recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
     recorder.setVideoSize(640, 480); 
     recorder.setVideoFrameRate(20); 
     recorder.setVideoEncodingBitRate(3000000); 
     recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 
     recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264); 

     try { 

      String videopath = File.createTempFile("video", ".mp4") 
        .getAbsolutePath(); 

      recorder.setOutputFile(videopath); 

     } catch (IllegalStateException e) { 
      e.printStackTrace(); 
     } catch (IOException e) {   
      e.printStackTrace(); 
     } 

     recorder.setPreviewDisplay(holder.getSurface()); 
+0

절대적인 생명을 구하는 사람 ... 나는 내 머리카락을 꺼내는 것에서 21 세 때 대머리가 될까봐 두려웠다 ... 실제로 어떤 라인이 실제로 고정 되었는가를 알고 싶지만 상관없이 매우 행복하다. – Guardanis

+0

@Cruceo , 환영합니다 ... 고마워 ... :) – bharath

+1

@bharath : 전체 코드를 알려주시겠습니까? –

0

이 장치는 MediaRecorder.setOrientationHint()를 지원하지 않는 것으로 보입니다. 그 줄을 주석 처리하십시오. mMediaRecorder.setOrientationHint (90)