У меня смартфон Huawei P9 Plus под управлением Android 7.0.Я использую MediaRecorder
для записи передней камеры.Это 8-мегапиксельная камера.Я использую следующие настройки (я думаю, что это самая важная часть, я не публикую весь класс, потому что в нем слишком много строк кода):
mMediaRecorder = new MediaRecorder();
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4)
mMediaRecorder.setOutputFile(videoFile.getAbsolutePath());
mMediaRecorder.setVideoEncodingBitRate(8000000);
mMediaRecorder.setVideoFrameRate(30)
mMediaRecorder.setVideoSize(1024 , 1920)
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaSurface = MediaCodec.createPersistentInputSurface();
mMediaRecorder.setInputSurface(mMediaSurface);
mMediaRecorder.prepare();
С этими настройками это работает, ноиногда видео немного дергается.Странно также то, что с размером видео 1024 x 1920 он работает, но когда я установил 1080 x 1920, он больше не работает (ошибки нет, но видео полностью повреждено).Это почему?В поддерживаемых разрешениях, которые я получил по характеристикам передней камеры, указано 1080 x 1920, но не 1024 x 1920.
Все остальные настройки в порядке?setVideoEncodingBitRate
нормально для 8-мегапиксельной камеры?
Я также пытался использовать данный профиль следующим образом:
mMediaRecorder = new MediaRecorder();
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mMediaRecorder.setOutputFile(videoFile.getAbsolutePath());
mMediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_1080P));
mMediaRecorder.setVideoFrameRate(30)
mMediaSurface = MediaCodec.createPersistentInputSurface();
mMediaRecorder.setInputSurface(mMediaSurface);
mMediaRecorder.prepare();
Когда я запускаю его таким образом, я получаю ошибкукогда я пытаюсь остановить MediaRecorder (остановка не удалась: -1007), возможно, потому, что запись видео не удалась.Зачем?Я сделал ошибку?