Android: записанное видео выглядит * искаженным * - PullRequest
2 голосов
/ 27 августа 2010

Я пытаюсь записать видео с камеры с помощью MediaRecorder.Вот фрагмент кода

snip ..

<code>
  mr.setAudioSource( MediaRecorder.AudioSource.MIC );
  mr.setVideoSource( MediaRecorder.VideoSource.CAMERA);
  mr.setOutputFormat( MediaRecorder.OutputFormat.THREE_GPP );
  mr.setAudioEncoder( MediaRecorder.AudioEncoder.AMR_NB );
  mr.setVideoEncoder( MediaRecorder.VideoEncoder.MPEG_4_SP );
  mr.setVideoSize( 200, 200 );
  mr.setVideoFrameRate( 15 );
..snap

Код выполняется на MileStone / Droid, будет создан непустой выходной файл.Но когда я пытаюсь просмотреть видео, оно выглядит так:

alt text

Мои первые мысли были о какой-то ошибке кодирования, поэтому я попробовал все возможные комбинации OutputFormat / VideoEncoder,без результатов в результате.

LogCat показывает следующую ошибку CameraInput: Неподдерживаемый параметр (x-pvmf / media-input-node / cap-config-interface; valtype = key_specific_value)

НоЯ не могу понять, что я мог установить неправильно.Я использовал camera.getParameters (), установил размер предварительного просмотра с возвращенными параметрами, а затем сдвинул их обратно с помощью camera.setParameters () ...

Проработал каждый фрагмент кода, который я мог найти, но все же нашелнет решения.

У кого-нибудь есть идеи?

Ответы [ 4 ]

2 голосов
/ 11 октября 2011

Вы должны установить правильную функцию setVideoSize (x, y). Вы должны вызвать функцию, которая дает вам варианты размера, и выбрать из этого списка

1 голос
/ 30 ноября 2012

Чтобы избежать искажений в записанном видео (я видел это на Galaxy S3), убедитесь, что вы установили размер предварительного просмотра параметров камеры и размер видео для медиа-рекордера на ту же высоту и ширину.

Чтобы получить поддерживаемый размер предварительного просмотра камеры:

Camera.Parameters parameters = camera.getParameters();

List<Camera.Size> list = parameters.getSupportedPreviewSizes();

parameters.setPreviewSize(list.get(X).width, list.get(X).height); 
// If you set Width and Height not supported by device you will get exception


// MediaRecorder object mMediaRecoder

mMediaRecoder.setVideoSize(list.get(X).width, list.get(X).height);
1 голос
/ 16 августа 2011

при открытой камере

    Camera.Parameters p = mCamera.getParameters();
    p.setPreviewSize(mSur.getWidth(), mSur.getHeight());
    mCamera.setParameters(p);

и когда вы готовите запись

            mCamera.unlock();
    if (mRecorder == null) {
        mRecorder = new MediaRecorder();
    } else {
        mRecorder.reset();  
    }
    mNextRecordFileName = getOneFileName();
    mRecorder.setCamera(mCamera);
    mRecorder.setVideoSource(mVideoSource);   
    mRecorder.setAudioSource(mAudioSource);  
    mRecorder.setPreviewDisplay(mSur.getHolder().getSurface());
    mRecorder.setOutputFormat(mVideoFormat);    

    //设置在setEncoder之前才有效,如果不设置,htc会崩溃掉
    mRecorder.setVideoSize(this.mSur.getWidth(), mSur.getHeight());
    Log.i(TAG, this.mSur.getHolder().getSurfaceFrame().height()+"gao");
    Log.i(TAG, this.mSur.getHolder().getSurfaceFrame().width()+"kuan");
    Log.i(TAG, "宽"+this.mSur.getWidth()+"高"+mSur.getHeight());

    mRecorder.setVideoEncoder(mVideoEncoder);   
    mRecorder.setAudioEncoder(mAudioEncoder);
    mRecorder.setOutputFile(mNextRecordFileName);

надеюсь, что это поможет вам

0 голосов
/ 09 мая 2011

Эй, я знаю, что вы опубликовали это некоторое время назад, и я сомневаюсь, что вы все еще ищете ответ, но я подумал, что это может помочь кому-то еще.

Мне кажется, ваша проблема mr.setVideoSize( 200, 200 );

Я сомневаюсь, что камера телефона поддерживает разрешение захвата 1X1.Лучше использовать что-то вроде mr.setVideoSize(Camcorder.get(Camcorder.QUALITY_LOW).videoFrameWidth,Camcorder.get(Camcorder.QUALITY_LOW).videoFrameHeight);

, чтобы гарантировать, что разрешение поддерживается камерой.Также убедитесь, что ваше разрешение предварительного просмотра соответствует разрешению вашей камеры, или это может вызвать ту же проблему.Я знаю, что это произойдет со мной, если для моего предварительного просмотра установлено значение QUALITY_HIGH, а для моей камеры - QUALITY_LOW

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...