Android MediaRecorder создает поврежденное видео с зелеными линиями

Я пытаюсь добавить возможность записи видео в свое приложение с помощью MediaRecorder в Android, но полученное видео выглядит поврежденным с зелеными линиями (со звуком все в порядке). Следующий код — это то, что я использую для инициализации объекта MediaRecorder:

mMediaRecorder = new MediaRecorder();
mCamera.unlock();
mMediaRecorder.setCamera(mCamera);
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setOutputFile(Utility.CAPTURE_VIDEO_FILENAME);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H263);
mMediaRecorder.setMaxDuration(60000);
mMediaRecorder.setVideoFrameRate(20);
mMediaRecorder.setMaxFileSize(5000000);
mMediaRecorder.setVideoSize(352, 288);
mMediaRecorder.setPreviewDisplay(mPreview.mHolder.getSurface());
mMediaRecorder.prepare();
mMediaRecorder.start();

Я уже рассмотрел предложения здесь и здесь, но они не кажется, помочь моему делу. Однако я думаю, что это может быть связано с неправильным размером видео. Итак, мой вопрос заключается в следующем: есть ли хороший способ получить совместимые размеры видео при использовании уровня API 7? Насколько я могу судить, я могу использовать CamcorderProfile, если я нахожусь на уровне API 8, но ничего в 7.


person jvergeldedios    schedule 29.04.2011    source источник
comment
Последний ответ на этот пост сделал это. Вам нужно вызвать Camera.stopPreview() перед Camera.unlock().   -  person jvergeldedios    schedule 29.04.2011
comment
у меня похожая проблема... и не решает ее на 100%. Я прочитал много сообщений, и ребята сказали - это ошибка. Но не на всех телефонах. Также, если setVideoSize(320,240)(320,240 работало на телефоне.. но когда установлено больше, чем я вижу зеленый блок) - это тоже должно исправить   -  person Peter    schedule 20.07.2011


Ответы (4)


Размер видео на устройстве равен размеру предварительного просмотра. Вы должны сначала проверить, доступен ли установленный вами размер видео или нет. Размеры видео на разных устройствах могут различаться. Поэтому сначала проверьте доступные размеры предварительного просмотра, используя getSupportedPreviewSizes(), а затем установите размер видео. Если размер видео неправильный, появятся зеленые линии.

person Amrendra    schedule 27.06.2013

Вы можете изменить эти параметры и посмотреть, как меняется качество:

recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);

Следующий код в любом случае запишет для вас видео:

рекордер MediaRecorder;

private void initRecorder() {

    recorder = new MediaRecorder(); 
        recorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);

        recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        recorder.setVideoEncoder(MediaRecorder.VideoEncoder.MPEG_4_SP);

        if (this.getResources().getConfiguration().orientation != Configuration.ORIENTATION_LANDSCAPE) {
            recorder.setOrientationHint(90);//plays the video correctly
        }else{
            recorder.setOrientationHint(180);
        }


        recorder.setOutputFile("/sdcard/MediaAppVideos/"+randomNum+".mp4");

    }

private void prepareRecorder() {
        recorder.setPreviewDisplay(holder.getSurface());
        try {
            recorder.prepare();
        } catch (IllegalStateException e) {
            e.printStackTrace();

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

        }
    }

public void surfaceDestroyed(SurfaceHolder holder) {
        try {
            if (recording) {
                recorder.stop();
                recording = false;
            }
            recorder.release();
            // finish();
        } catch (Exception e) {

        }

    }
person TharakaNirmana    schedule 27.06.2013
comment
Изменение setVideoEncoder на MPEG_4_SP решило мою проблему. Спасибо @TharakaNirmana - person Yashaswi N P; 24.04.2021

Проверьте свой код на наличие setRecordingHint(true);

http://developer.android.com/reference/android/hardware/Camera.Parameters.html#setRecordingHint(boolean)

Установка этого параметра вызывает эти зеленые сбои в видео на нескольких устройствах.

person user2143600    schedule 25.11.2013

У меня зеленые пятна были только на одном устройстве для 1920х1080. Для более высокого или более низкого разрешения записанное видео в порядке. Когда я устанавливаю размер предварительного просмотра таким же, как размер видео, я не вижу зеленых полос

person AMRAY    schedule 07.03.2019
comment
это не ответ - person Mark Melgo; 07.03.2019