Году в 2014-м купил первый USB-эндоскоп, еще с камерой более 10 мм диаметром. Он честно поддерживал соответствующий USB class, и все винды, начиная с XP, прекрасно работали с ним через общий стандарный драйвер UsbVideo. Но, когда попытался подключить к моему тогдашнему смартфону на андроиде 4.2, меня ждал облом — оказалось, что для многих USB-камер нужны песциальные драйверы, которых в андроиде искаропки нету, их нужно устанавливать через рутование и приседания. Тогда я эту идею забросил.
После этого у меня был эндоскоп поменьше, который с тем смартфоном тоже не работал, нормально работал с андроидом 5.1, но только в двух приложениях — CameraFi и UsbWebCamera. В остальных видео жутко лагало с любым разрешением, приложения зависали, иногда и сам андроид начинал виснуть.
Последние несколько лет я пользовался 8-мм моделью на SunplusIT SPCA2092A (PID 2085).
Недавно купил еще один с кабелем подлиннее, он оказался на какой-то микросхеме Realtek (PID 0521). Все винды его снова отлично понимают, но CameraFi и UsbWebCamera на смартфонах с андроидом 5.1 и 9.0 не понимают напрочь. Получилось только в inskam, и только в андроиде 5.1 — в 9.0 не получилось.
Отчего весь этот ужас? В андроидах нет нормальной поддержки стандартных функций USB class, и каждому приложению приходится использовать свои костыли? Или нет более-менее устоявшегося API, и там регулярно меняются умолчания, предпочтения и прочее?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Как в последних андроидах с поддержкой USB-камер?
pixel6, древняя "046d:0821 Logitech, Inc. HD Webcam C910" — родными средствами никак, но первые попавшиеся софтины из стора её подхватили — "usb camera" и "camerafi2".
Здравствуйте, aik, Вы писали:
aik>первые попавшиеся софтины из стора её подхватили
Понятно, что в отдельных случаях можно найти рабочие комбинации. Меня удивляет то, что все без исключения USB-камеры, как и звуковые адаптеры, поддерживают соответствующие USB classes, интерфейсы которых давным-давно устоялись, и для которых в ОС должен быть единый, универсальный драйвер, которому по барабану VID/PID. В винде уже очень давно именно так. А вот почему в андроидах не так? Это особенности линукса, или именно андроида?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Как в последних андроидах с поддержкой USB-камер?
Всё плохо. Пока у вас нет root-а вы не можете добавить нужный драйвер. Обновление драйверов в андройде выполняется обновлением устройства
Так что ищите камеру совместимую или ту что по wifi работает.
Здравствуйте, kov_serg, Вы писали:
_>не можете добавить нужный драйвер
А зачем его вообще добавлять? Винда прекрасно обходится одним UsbVideo.sys для всех без исключения устройств соответствующего класса. Что андроиду мешает?
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>А зачем его вообще добавлять? Винда прекрасно обходится одним UsbVideo.sys для всех без исключения устройств соответствующего класса. Что андроиду мешает?
Ничто не мешает. Там linux и эти дрова просто не включили в образ.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Понятно, что в отдельных случаях можно найти рабочие комбинации. Меня удивляет то, что все без исключения USB-камеры, как и звуковые адаптеры, поддерживают соответствующие USB classes, интерфейсы которых давным-давно устоялись, и для которых в ОС должен быть единый, универсальный драйвер, которому по барабану VID/PID. В винде уже очень давно именно так. А вот почему в андроидах не так? Это особенности линукса, или именно андроида?
Это очень сильный вывод. До сих пор у меня распознавались все USB камеры что на ноуте с федорой, что на андроиде с usb-otg. Ну, до пиксела (с родной прошивкой) у меня андроиды были только хакнутые — с cyanogenmod или lineageos, т.е. близко к ванильной прошивке. Понятно, что в отдельных случаях можно найти нерабочие комбинации, но мне повезло (?).
Здравствуйте, Евгений Музыченко, Вы писали:
aik>>у меня андроиды были только хакнутые — с cyanogenmod или lineageos ЕМ>У меня все рутованные, но исключительно для уровне загрузчиков, ядра родные.
Наличие рута не говорит ничего о наличии драйвера и что там в /etc/modprobe.d и прочих udev конфигах. Меня вот до сих пор вымораживает как, почему ant+ не включён по дефолту в стоковых ядрах на поддерживающем железе (а это практически весь qualcomm последние лет так 7-10).
Здравствуйте, aik, Вы писали:
aik>Наличие рута не говорит ничего о наличии драйвера и что там в /etc/modprobe.d и прочих udev конфигах.
Если там универсальный драйвер, работающий именно с UVC, он обязан либо поддерживать любые камеры этого класса, либо не поддерживать никакие. А вот когда одни поддерживаются, а другие нет, чем это объяснить?
Если в образе нет драйвера UVC, то не должны работать никакие камеры. Ну, или какие-то могут опознаваться по VID/PID, но это опять же означает, что все сделано через задницу.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Если там универсальный драйвер, работающий именно с UVC, он обязан либо поддерживать любые камеры этого класса, либо не поддерживать никакие. А вот когда одни поддерживаются, а другие нет, чем это объяснить?
Вот хз как это сделано конкретно, но апп в андроиде может установить свой драйвер. Например, sdr (софтовое радио) так делает. Т.е. стоковый ведроид может не иметь этого драйвера вообще, а у аппа он будет, но только для "своих" девайсов.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Если в образе нет драйвера UVC, то не должны работать никакие камеры. Ну, или какие-то могут опознаваться по VID/PID, но это опять же означает, что все сделано через задницу.
То что там всё через задницу уже давно ясно. Это не компьютеры для инженеров, а устройства для потребления контента биомассой и цифровой рынок и контроль.
Здравствуйте, aik, Вы писали:
aik>апп в андроиде может установить свой драйвер.
В ядро — не может.
aik>sdr (софтовое радио) так делает. Т.е. стоковый ведроид может не иметь этого драйвера вообще, а у аппа он будет, но только для "своих" девайсов.
Это не драйверы, а обычные плагины, унифицирующие приложению доступ к устройствам, для которых есть драйверы в ядре. Если ядро вообще не понимает устройства, никакое приложение с ним работать не сможет.
Возможно, в андроидах до сих пор какая-то ограниченная поддержка UVC, хуже даже той, что была в XP двадцать лет назад, и приложения вынуждены реализовывать часть функций самостоятельно, если само устройство их не поддерживает (или поддерживает по-разному).
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Возможно, в андроидах до сих пор какая-то ограниченная поддержка UVC, хуже даже той, что была в XP двадцать лет назад, и приложения вынуждены реализовывать часть функций самостоятельно, если само устройство их не поддерживает (или поддерживает по-разному).
Все это может помочь лишь осознать, что в андроиде с UVC все крайне убого — гораздо хуже, чем в в XP двадцать лет назад.
Приложение из этих трех проектов — только первое, остальные два — библиотеки для разработчиков. Но и в первом проекте, если перейти по ссылке с APK, попадаешь на чисто китайский сайт. Что, кстати, хорошо отражает культуру разработки.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Возможно, в андроидах до сих пор какая-то ограниченная поддержка UVC, хуже даже той, что была в XP двадцать лет назад, и приложения вынуждены реализовывать часть функций самостоятельно, если само устройство их не поддерживает (или поддерживает по-разному).
В андроиде вообще никаких драйверов нет для посторонних устройств. Недавно с этим столкнулся. Даже для UART через USB нет драйвера (точней драйвер есть, это же линукс, но доступа к этому драйверу у приложений нет).
Всё, что андроид даёт приложению, это сырые интерфейсы USB. А дальше уже из userspace предлагается реализовывать руками этот драйвер.
Конкретно с USB-камерами не разбирался, но подозреваю, что ситуация идентичная.