API разблокировки Android MediaRecorder14+

Что делать с разблокировкой Camera перед записью с помощью MediaRecorder? В документах говорится:

Запись видео с помощью платформы Android требует тщательного управления объектом Camera и координации с классом MediaRecorder. При записи видео с помощью камеры вы должны управлять вызовами Camera.lock() и Camera.unlock(), чтобы разрешить MediaRecorder доступ к оборудованию камеры, в дополнение к вызовам Camera.open() и Camera.release().

Примечание. Начиная с Android 4.0 (уровень API 14), вызовы Camera.lock() и Camera.unlock() управляются автоматически.

Однако независимо от того, на каком устройстве я тестирую, если я не вызову Camera.unlock до MediaRecorder.start, я получу исключение (start failed).

Документы врут или я что-то не так делаю?

Мой поток заключается в том, чтобы открыть камеру (используя Camera.open(int)), установить подсказку записи в true, установить предварительный просмотр FPS и размер, а также ориентацию дисплея. Затем я создаю MediaRecorder и устанавливаю источник аудио и видео, выходной формат, частоту кадров, размер, битрейт видео, кодировщик аудио и видео, подсказку ориентации, выходной файл, а затем вызываю MediaRecorder.prepare.

Если все это завершается успешно, когда пользователь нажимает кнопку записи, я вызываю MediaRecorder.start() и генерируется исключение. Если я вместо этого позвоню:

Camera.unlock();
MediaRecorder.start();

нет исключений.


person Eliezer    schedule 24.04.2014    source источник


Ответы (1)


У меня достаточно опыта работы с MediaRecorder, чтобы сказать, что эта ошибка может возникать в большом количестве случаев. кстати, если проблема в методах блокировки/разблокировки, ошибка будет

разблокировать не удалось

В большинстве случаев ошибка (неудачный запуск) возникает из-за неправильной инициализации регистратора. Напишите свой метод инициализации, пожалуйста.

person Slampy    schedule 24.04.2014
comment
Я не хочу описывать весь метод инициализации. Однако проблема в том, что когда unlock нет, возникает исключение. Когда он есть (и больше ничего не изменилось), он работает. - person Eliezer; 24.04.2014
comment
Мб это глупо, но камера используется каким-то другим процессом в вашем приложении? В этом есть смысл: вы разблокируете камеру, и тогда она свободна - ваш регистратор может работать)) - person Slampy; 24.04.2014
comment
Не должно быть ничего другого, использующего камеру, но я проверю. - person Eliezer; 24.04.2014
comment
В приложении нет ничего другого, использующего камеру. - person Eliezer; 25.04.2014