У меня есть два разных базовых кода с той же проблемой.
Первый - это код, скопированный прямо с сайта developer.android.com: http://developer.android.com/guide/topics/media/camera.html#custom-camera
Второй - это код:
http://android-er.blogspot.com.au/2011/10/simple-exercise-of-video-capture-using.html
Оба работают нормально с обычной задней камерой, но как только я пытаюсь использовать переднюю камеру, я получаю ошибку.
Это происходит на следующих устройствах:
-
Nexus S 4.1.2
-
Galaxy Nexus 4.1.2
-
Nexus 7 4.2.1 (он имеет только фронтальную камеру)
Я пробовал то, что выглядит как 2.2 Param Camera Camera, а некоторые, как утверждают некоторые люди, требуются с некоторыми устройствами Samsung и HTC, хотя несколько разных статей ссылаются на разные клавиши String:
c = Camera.open(frontFacingCameraID); // attempt to get a Camera instance
Camera.Parameters params = c.getParameters();
params.set("cam-mode", 1);
params.set("cam_mode", 1);
params.set("camera-id", 1);
c.setParameters(params);
Ни одна из этих работ также не учитывает, что я обнаруживаю правильный идентификатор камеры передней панели, который, конечно же, на Nexus 7: 0. Но результаты на всех устройствах одинаковы.
Я попытался использовать профиль низкого качества, я пытался настроить разрешение видео, кодировщик, формат вывода, битрейт, частоту кадров и размер видео вручную множеством способов, но ни один из них не работал.
Вещь, которая заставляет меня думать, что ничего плохого в большей части кода заключается в том, что обычная камера работает нормально. Поэтому я предполагаю, что это связано с методом prepareVideoRecorder()/prepareMediaRecorder(), который устанавливает Media Recorder.
Возможно, настройки ручного кодирования медиарекордера, которые, как известно, работают на фронтальной передней панели?
Я должен сказать, что Android Camera и MediaRecorder API сосут. По сравнению с iOS это немного беспорядок, не говоря уже о некоторых страшных проблемах несовместимости параметров пара и разных разрешениях на фрагментированном ландшафте устройств.
Предполагая, что я могу заставить его работать на своих JB-устройствах, знает ли кто-нибудь из опыта, если большинство из этих проблем разрешено с помощью API 15 ICS?
Я бы предпочел не поддерживать API 10 Gingerbread, если его будет слишком сложно поддерживать.