#java #android #encoding #camera
#java #Android #кодирование #камера
Вопрос:
Ребята, кто-нибудь может мне сказать, как я должен установить параметры в MediaRecorder
, чтобы получить наилучший эффект записи видео, возможный с помощью кодирования, без учета физических ограничений телефона? Или есть какой-либо эффект небольшого искажения вида, вызванный моим кодированием MediaRecorder
?
Если кто-то из вас может догадываться о неясных параметрах, я на самом деле устанавливаю некоторые параметры с помощью настроек. Каких параметров мне не хватает, которые могли бы помочь улучшить процесс кодирования видео, например: частоты кадров
Комментарии:
1. Вы говорите о качестве? Это зависит от устройства к устройству в зависимости от базовых кодеков и камеры, но попробуйте сменить видеокодер на H264 и увеличить разрешение, посмотрим, поможет ли это..
2. @Ravi привет, просто чтобы убедиться, какая часть моего кода действительно обрабатывает кодировку и разрешение?
3. Вам нужно будет установить разрешение, используя
void setVideoSize(int width, int height)
и кодировкуpublic void setVideoEncoder (int video_encoder)
, в экземпляре класса MediaRecorder. Проверьте документацию MediaRecorder здесь
Ответ №1:
В зависимости от уровня 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);
Пожалуйста, обратите внимание, что вы не можете использовать оба варианта вместе, так как вы получите ошибки или ваш prepare не будет работать
Поскольку не все Android API и / или устройства поддерживают одинаковые значения, вам придется либо запрашивать максимальные значения для каждого устройства, либо найти что-то, что работает везде.
Комментарии:
1. Примечание: Вы должны удалить
setOutputFormat()
,setVideoEncodingBitRate()
,setAudioEncodingBitRate()
setVideoEncoder()
,setAudioEncoder()
setAudioSamplingRate()
,,,,,,,,,,,,,,setVideoFrameRate()
2. встроен ли CamcorderProfile в somehwre? не определено в Chrome Windows 7 (почти) последней версии
Ответ №2:
Хотя вопрос довольно старый, я хотел бы указать на комбинацию, которую я использовал для записи видео высокого качества.
Используйте приведенную ниже комбинацию кода для достижения видео высокого качества.
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);
Используйте приведенный ниже код, чтобы получить 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);
}
Надеюсь, это поможет.
Комментарии:
1. что такое переменная ORIENTATIONS?
2. @Vodet пожалуйста, проверьте обновленный код .. извините за задержку ответа
3. Проблема в том, что вы не знаете, поддерживает ли устройство размер видео, указанный @
CamcorderProfile.QUALITY_HIGH
.4. Как насчет высококачественного звука?
5. @mickecast качество не имеет видимой разницы.