Как настроить MediaRecorder для получения лучшего эффекта качества видео? - PullRequest
14 голосов
/ 19 мая 2011

Ребята, может кто-нибудь сказать мне, как мне установить параметры в MediaRecorder, чтобы получить наилучший возможный эффект видеозаписи посредством кодирования, не учитывая физические ограничения телефона? Или есть какой-то эффект небольшого искажения вида, вызванного моим кодированием MediaRecorder?

Если некоторые из вас могут догадываться о неясных параметрах, я на самом деле устанавливаю некоторые параметры с помощью настроек. Какие параметры мне не хватает, которые могут помочь улучшить процесс кодирования видео Пример: частота кадров

Ответы [ 2 ]

37 голосов
/ 19 октября 2011

В зависимости от уровня API вы можете использовать существующие профили или нет.

без профилей:

recorder.setVideoSize(640, 480);
recorder.setVideoFrameRate(16); //might be auto-determined due to lighting
recorder.setVideoEncodingBitRate(3000000);
recorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);// MPEG_4_SP
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);

Или, если вы хотите использовать существующие профили

CamcorderProfile cpHigh = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);
recorder.setProfile(cpHigh);

Обратите внимание, что вы не можете использовать оба варианта вместе, так как вы получите ошибки, или ваша подготовка не будет работать

Поскольку не все Android API и / или устройства поддерживают одинаковые значения, вам придется либо запросить максимальные значения для каждого устройства, либо найти что-то, что работает везде.

2 голосов
/ 22 августа 2018

Хотя вопрос довольно старый, я хотел бы указать на комбинацию, которую я использовал для записи видео в качестве HD.

Используйте приведенную ниже комбинацию кода для получения видео высокого качества.

CamcorderProfile cpHigh = CamcorderProfile.get(CamcorderProfile.QUALITY_HIGH);                    mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);                    mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);                    mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mMediaRecorder.setVideoSize(DISPLAY_WIDTH, DISPLAY_HEIGHT);                    mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);                    mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);                    mMediaRecorder.setVideoEncodingBitRate(cpHigh.videoBitRate);                    mMediaRecorder.setVideoFrameRate(cpHigh.videoFrameRate);
int rotation = mWindowManager.getDefaultDisplay().getRotation();
int orientation = ORIENTATIONS.get(rotation + 90);
mMediaRecorder.setOrientationHint(orientation);

Use below code to get the DISPLAY_HEIGHT,DISPLAY_WIDTH

DisplayMetrics metrics = new DisplayMetrics();      
mWindowManager.getDefaultDisplay().getMetrics(metrics);          
DISPLAY_WIDTH = metrics.widthPixels;
DISPLAY_HEIGHT = metrics.heightPixels;

Определите ОРИЕНТАЦИИ, как показано ниже

public static final SparseIntArray ORIENTATIONS = new SparseIntArray();
static {
ORIENTATIONS.append(Surface.ROTATION_0, 90);
ORIENTATIONS.append(Surface.ROTATION_90, 0);
ORIENTATIONS.append(Surface.ROTATION_180, 270);
ORIENTATIONS.append(Surface.ROTATION_270, 180);
}

Надеюсь, это поможет.

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