Я использую записываемую поверхность для записи видео. Я пытаюсь подготовить медиа-рекордер, настраивая все атрибуты, а также ширину и высоту videoSize. Он прекрасно работает на всех телефонах, но не работает на телефонах с выемками. Я настраиваю высоту и иногда вижу предварительный просмотр. Но если я оставлю его по умолчанию для всех устройств, настроив высоту и ширину дисплея для displayMetrics, он будет работать для некоторых телефонов и не будет работать для моего телефона PIXEL3 XL. Пожалуйста, помогите.
Вот так я настраиваю свой медиа-рекордер методом init.
private void resetVideoFragment() {
logger.info("Resetting Video Fragment ");
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int height = displayMetrics.heightPixels;
int width = displayMetrics.widthPixels;
if (videoRenderer == null) {
videoRenderer = new Renderer(this, width, height);
}
setupVideoFragment(videoRenderer);
viewHolder.liveSurfaceView.resume();
videoFile = getVideoFile();
try {
viewHolder.liveSurfaceView.initRecorder(videoFile, width, height, (mr, what, extra) -> {
logger.error("Media Recorder error " + " what: " + what + " extra: " + extra);
}, (mr, what, extra) -> {
logger.error("Media Recorder Info " + " what: " + what + " extra: " + extra);
});
} catch (IOException iox) {
logger.error("Couldn't re-init recording " + iox);
}
}
Вот так выглядит мой метод init mediarecorder
public void initRecorder(File saveToFile, int displayWidth, int displayHeight,
int orientationHint, MediaRecorder.OnErrorListener errorListener,
MediaRecorder.OnInfoListener infoListener) {
MediaRecorder mediaRecorder = new MediaRecorder();
mediaRecorder.setOnInfoListener(infoListener);
mediaRecorder.setOnErrorListener(errorListener);
mediaRecorder.setVideoSource(MediaRecorder.VideoSource.SURFACE);
mediaRecorder.setInputSurface(mSurface);
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mediaRecorder.setAudioSamplingRate(44100);
mediaRecorder.setAudioEncodingBitRate(96000);
mediaRecorder.setVideoSize(displayWidth, displayHeight);
(On phone which doesn't work If i try to tweak this height and width
it able to shows preview if i increase more number to it and
it throws to the error i was talking about while recording
How to make it work for all the phones ?)
mediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.DEFAULT);
// original setting-- resulted in a huge file in just a few seconds!!
// mediaRecorder.setVideoEncodingBitRate(12000000);
mediaRecorder.setVideoEncodingBitRate(7500000);
mediaRecorder.setVideoFrameRate(30);
mediaRecorder.setOrientationHint(orientationHint);
mediaRecorder.setOutputFile(saveToFile.getPath());
mediaRecorder.setPreviewDisplay(mSurface);
try {
mediaRecorder.prepare();
} catch (IOException e) {
logger.error("IO Exception on Media Recorder init method: " + e.getLocalizedMessage());
}
mMediaRecorder = mediaRecorder;
}
код ошибки чего: 100 дополнительно: 2
а что: 268435556 дополнительно: -1007 при записи