Проблема с камерой Motorola DROID RAZR Когда я записываю видео - PullRequest
3 голосов
/ 19 марта 2012

Я протестировал свое приложение на различных мобильных телефонах. Основным функционалом моих приложений является фотографирование и запись видео через камеру телефона. У меня не было проблем на большинстве мобильных телефонов, но я сталкивался с этой проблемой на Motorola DROID RAZR . Мое приложение работает нормально, когда я делаю снимок. Но я сталкиваюсь с проблемой, когда записываю видео. Когда я записываю видео, я получаю пустой экран. На экране мобильного телефона нет предварительного просмотра. Я не знаю, почему это происходит, но на большинстве мобильных телефонов работает нормально. И фотографирование работает нормально на этом телефоне (Droid Razr).

Конфигурация Motorola DROID RAZR,

  1. ОПЕРАЦИОННАЯ СИСТЕМА: Android 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); 

Обновление:

Я тестировал это приложение на эмуляторе 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 ]

3 голосов
/ 28 марта 2012

Наконец я нашел решение. Ниже код хорошо работает на всех устройствах. ;)

        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 голосов
/ 30 мая 2013

Похоже, это устройство не поддерживает MediaRecorder.setOrientationHint ().Попробуйте закомментировать эту строку.mMediaRecorder.setOrientationHint (90)

...