Android MediaRecorder выдает поврежденное видео с зелеными линиями - PullRequest
4 голосов
/ 29 апреля 2011

Я пытаюсь добавить возможность записи видео в свое приложение, используя 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 уровне.

Ответы [ 4 ]

1 голос
/ 25 ноября 2013

Проверьте ваш код для setRecordingHint (true);

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

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

1 голос
/ 27 июня 2013

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

0 голосов
/ 07 марта 2019

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

0 голосов
/ 27 июня 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) {

        }

    }
...