Имам приложение, което използва MediaRecorder за запис на видео и имам проблем със запис с ниска разделителна способност на Samsung Galaxy S5 SM-G900F (само това устройство - записът на най-ниската поддържана разделителна способност на видео работи добре на всичко останало, с което съм тествал).
Първо разпитвам параметрите на камерата (с обект Camera Parameters, така че mParameters.getSupportedVideoSizes();
и mParameters.getSupportedPreviewSizes();
), за да проверя за наличните разделителни способности за запис и визуализация и S5 връща съответно следните поддържани размери за видео и визуализация:
Video Size List: Preview Size List:
W = 1920, H = 1080
W = 1920, H = 1080 W = 1440, H = 1080
W = 1440, H = 1080 W = 1280, H = 720
W = 1280, H = 720 W = 1056, H = 864
W = 800, H = 450 W = 960, H = 720
W = 800, H = 480 W = 800, H = 480
W = 720, H = 480 W = 720, H = 480
W = 640, H = 480 W = 640, H = 480
W = 352, H = 288 W = 352, H = 288
W = 320, H = 240 W = 320, H = 240
W = 176, H = 144 W = 176, H = 144
Обхватът на върнатите поддържани честоти на кадрите е 10 000-30 000, така че избирам 10 000 за най-ниската разделителна способност на запис (10 FPS).
Избирам най-ниската разделителна способност, предлагана от S5, която е 176(w) x 144(h) (за да запазя размера на видео файла малък) и след това правя следните настройки на MediaRecorder...
mMediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mMediaRecorder.setVideoSource(MediaRecorder.VideoSource.CAMERA);
mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mMediaRecorder.setVideoFrameRate(10);
mMediaRecorder.setVideoSize(176, 144);
mMediaRecorder.setVideoEncodingBitRate(256000);
mMediaRecorder.setVideoEncoder(MediaRecorder.VideoEncoder.H264);
mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
mMediaRecorder.setPreviewDisplay(mSurfaceHolder.getSurface()); // Preview size is also set to 176 x 144
mMediaRecorder.setOutputFile(mVideoFilename);
... преди да извикате mMediaRecorder.prepare();
, последвано от mMediaRecorder.start();
.
Този код работи добре на "Sony XPeria", "HTC One", "HTC One V", "Samsung Galaxy S3" и "HTC Explorer" и редица други устройства, работещи с различни версии на Android от Gingerbread до KitKat (не мога да получа отделен списък с размери на видео в Gingerbread).
Само Samsung Galaxy S5 има проблем със записа при 176 x 144. При извикване на mMediaRecorder.start();
записът не започва с "java.lang.RuntimeException: стартирането е неуспешно." изключение.
Не мога да разбера какъв е проблемът. Всички други разделителни способности на запис (с повишени настройки на EncodingBitRate) работят добре - само 176 x 144 не работи на S5.
Някой друг виждал ли е този проблем? Някой знае ли дали има проблем с S5, който спира записа да работи правилно при най-ниската поддържана видео резолюция? Или има някакъв „трик“ на Samsung, който пропускам?
Всяка помощ или прозрения ще бъдат много оценени - направо си скубя косата заради това!