Итак, наконец-то все заработало.
Кажется, что проблема определенно относится к Profile Settings
и, в частности, Frame Rate
.
На Nexus S, моем основном тестовом устройстве, если я проверю камеру, я получаю следующие параметры:
Для задней камеры:
от 15 до 30 кадров в секунду, достаточно неплохо.
Для передней камеры:
от 7,5 до 30 кадров в секунду, хорошо.
Затем я проверяю профили, которые пытаюсь использовать:
CamcorderProfile.QUALITY_HIGH
CamcorderProfile.QUALITY_LOW
QUALITY_LOW:
audioBitRate: 12200
audioChannels: 1
audioCodec: AMR_NB audioSampleRate: 8000
продолжительность: 30
fileFormat: THREE_GPP
качество: 0
videoBitRate: 256000
videoCodec: H264
videoFrameRate: 30
videoFrameWidth: 176
videoFrameHeight: 144
QUALITY_HIGH:
audioBitRate: 24000
audioChannels: 1
audioCodec: AAC
audioSampleRate: 16000
продолжительность: 60
fileFormat: MPEG_4
качество: 1
videoBitRate: 3000000
videoCodec: H264
videoFrameRate: 30
videoFrameWidth: 720
videoFrameHeight: 480
Очевидно, что профиль высокого качества предназначен для задней камеры, поскольку размер передней панели составляет всего 640x480. Но оба заявляют 30 FPS.
А теперь .... Вот в чем странность:
Если я устанавливаю ЛЮБУЮ частоту кадров для задней камеры, независимо от того, какой профиль, она вылетает из-за ужасного:
-19 ошибка
mediaRecorder.setVideoFrameRate(fpsInt);
Это не имеет большого значения, потому что меня не волнует задняя камера, но это странно, учитывая, что профили по умолчанию равны 30, а Params
говорят, что они принимают 15-30. Но ни одно значение int, которое я пробовал, не сработало. Если я опущу setVideoFrameRate
, ничего страшного.
В любом случае, перейдем к передней камере.
Итак, если я использую профиль QUALITY_LOW
И устанавливаю частоту кадров 15 или ниже, это волшебным образом работает.
mediaRecorder.setProfile(CamcorderProfile.get(CamcorderProfile.QUALITY_LOW));
mediaRecorder.setVideoFrameRate(15);
Фактически работает любое значение от 1 до 15. Что кажется странным.
Итак, вот загадка: я, вероятно, смогу проверить разрешение и выбрать подходящее разрешение для большинства камер, хотя я также довольно уверен, что почти все фронтальные камеры имеют минимальное разрешение VGA 640x480.
Но как насчет частоты кадров? В случае с Nexus S я не вижу никакого способа определить значение 15 или ниже, просто не догадавшись? Должен ли я всегда использовать САМЫЙ НИЗКУЮ частоту кадров, возвращаемую камерой?
Я взглянул на Galaxy Nexus: у него 3 диапазона частоты кадров, первый - 15–15, а второй - 15–30. Его профиль низкого качества аналогичен, хотя и более высокому разрешению. Если я использую низкий профиль на Galaxy Nexus, он работает нормально.
С Nexus 7 я не могу исследовать CamcorderProfile, я продолжаю получать нулевые указатели, что странно. В нем говорится, что он поддерживает 4 - 60 кадров в секунду. Если я выберу QUALITY_LOW
, который, по вашему мнению, должен работать, произойдет сбой, и я не смогу найти частоту кадров, с которой он будет работать. Хотя ошибка относится к setProfile
, поэтому я думаю, что проблема во встроенном профиле. Конечно, смысл Android API в том, что он согласован, это флагманское устройство, а камера FF предназначена для видеоконференцсвязи, не так ли ?????
Итак, хотя у меня он работает на двух устройствах, используя ручные пользовательские настройки для каждого, я не вижу четкого способа заставить его работать на нескольких устройствах с помощью кода.
Кажется, что Nexus S не ведет себя так, как обещает, в отношении настройки FPS в соответствии с его Camera.getParameters().getSupportedPreviewFpsRange()
Я очень рад, что он использует настройки Auto FPS, но, видимо, этого не будет с камерой FF, так что мне делать? Я должен явно установить FPS на Nexus S и в этом случае от 1 до 15 FPS, несмотря на то, что камера говорит мне, что она обрабатывает 7,5 - 30 FPS.
Похоже, обещание setProfile
исправить все проблемы в 2.x не совсем соответствовало действительности.
Я могу понять, если вы пишете приложение камеры для определенного ПЗУ, вы просто настраиваете его для этого конкретного оборудования, что может объяснить, почему у людей всегда есть глючные приложения камеры на пользовательских ПЗУ. НО ..... Как работают загружаемые приложения для записи видео? Они индивидуальны для каждого устройства?
Это почему на Android еще нет Facebook Poke и Twitter Vine ???? :П
Гугл, что с вашим API камеры?
Кто-нибудь знает "лучшие практики" по определению разрешения и частоты кадров для всех API 15+
совместимых устройств?
Возможно ли это вообще, или я собираюсь писать собственный код на каждом тестируемом устройстве, а затем просто бросать кости на остальных?
Или Nexus S и Nexus 7 - это просто случайные происшествия?
person
Madhava Jay
schedule
06.02.2013