摩托罗拉DROID RAZR的相机问题当我录制视频时

时间:2012-03-19 13:23:00

标签: android android-camera video-recording motorola-droid

我已在各种手机上测试过我的应用程序。我的应用程序主要功能是通过手机摄像头拍摄照片和录制视频。我在大多数手机上都没有遇到问题,但我确实在Motorola DROID RAZR上遇到了这个问题。我拍照时我的应用程序工作正常。但是当我录制视频时,我遇到了一个问题。当我录制视频时,我得到一个空白屏幕。手机屏幕上没有预览显示。我不知道它为什么会发生,但在大多数手机上它的工作正常。并且在这款手机(droid razr)上正常拍照。

摩托罗拉DROID RAZR配置,

  1. 操作系统:Android v2.3.5。
  2. CAMERA:高清摄像头,8MP。
  3. 处理器:TI OMAP4430
  4. 这是我的代码,

    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); 
    

    更新

    我在Motorola Droid Razr仿真器上测试了这个应用程序。我得到以下例外,

    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)
    

    但我没有在我的其他模拟器上得到此异常。如何解决这个问题?

2 个答案:

答案 0 :(得分: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());

答案 1 :(得分:0)

此设备似乎不支持MediaRecorder.setOrientationHint()。尝试评论该行。 mMediaRecorder.setOrientationHint(90)