Android: выход фронтальной камеры MediaRecorder 144x176

Я не могу изменить разрешение видео на выходе видео из MediaRecorder.

  • Использование фронтальной камеры
  • SurfaceView

Активность

CamcorderProfile mProfile = CamcorderProfile.get( CamcorderProfile.QUALITY_HIGH );
recorder.setCamera( camera );
recorder.setAudioSource( MediaRecorder.AudioSource.CAMCORDER );
recorder.setVideoSource( MediaRecorder.VideoSource.DEFAULT );
recorder.setOutputFormat( mProfile.fileFormat );
recorder.setAudioEncoder( mProfile.audioCodec );
recorder.setVideoEncoder( mProfile.videoCodec );
recorder.setOutputFile( tempFile.getPath() );
recorder.setOrientationHint( 270 );
recorder.setVideoFrameRate( mProfile.videoFrameRate );
recorder.setVideoEncodingBitRate( mProfile.videoBitRate );
recorder.setAudioEncodingBitRate( mProfile.audioBitRate );
recorder.setAudioChannels( mProfile.audioChannels );
recorder.setAudioSamplingRate( mProfile.audioSampleRate );

Качество предварительного просмотра кристально чистое и работает отлично, но выходное видео имеет низкое разрешение и зернистость.

Использование recorder.setVideoSize( XXX, XXX ); дает мне эту ошибку:

Ошибка запуска E/MediaRecorder﹕: -19

Как мне увеличить разрешение моего вывода?


person Jonas Borggren    schedule 30.01.2015    source источник


Ответы (1)


Я исправил эту проблему (по крайней мере, на данный момент), получив параметры ширины/высоты из предварительного просмотра камеры.

int videoWidth = camera.getParameters().getPreviewSize().width;
int videoHeight = camera.getParameters().getPreviewSize().height;

А затем с помощью

recorder.setVideoSize( videoWidth, videoHeight );

Это делает вывод таким же, как предварительный просмотр камеры.

РЕДАКТИРОВАТЬ:

Если вы сохраните правильное соотношение и будет около 500x500, я думаю, вы можете получить любой из поддерживаемых размеров, выполнив следующие действия:

Camera.Parameters parameters = camera.getParameters();
Camera.Size size = parameters.getSupportedPreviewSizes().get( 0 );
for ( Camera.Size s : parameters.getSupportedPreviewSizes() ) {
    Log.e( "SIZE:", s.width + "x" + s.height );
    if ( s.width > 500 ) // from high to low res
        size = s;
}
Log.e( "SIZE", "Selected size: " + size.width + "x" + size + " (width still over 500)" );   
parameters.setPreviewSize( size.width, size.height );
camera.setParameters( parameters );

Вывод

РАЗМЕР: 1920x1080

РАЗМЕР: 1440x1080

РАЗМЕР: 1280x960

РАЗМЕР: 1280x720

РАЗМЕР: 960x720

РАЗМЕР: 864x480

РАЗМЕР: 768x432

РАЗМЕР: 720x480

РАЗМЕР: 640x480

РАЗМЕР: 320x240

РАЗМЕР: 176x144

Выбранный размер: 640x480 (ширина еще больше 500)

person Jonas Borggren    schedule 30.01.2015