Году в 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-камерами не разбирался, но подозреваю, что ситуация идентичная.
Здравствуйте, vsb, Вы писали:
vsb>В андроиде вообще никаких драйверов нет для посторонних устройств.
Вопрос в том, какие устройства он считает "посторонними". Он понимает, как минимум, audio (class 1), HID (class 3), mass storage (class 8). Но полного списка я навскидку найти не смог.
vsb>Даже для UART через USB нет драйвера
Как раз для UART "даже" неуместно — он не входит в множество типовых устройств, доступных андроидному приложению. А клавиатура, позиционер, камера, звук — входят. Поэтому было бы вполне логично иметь искаропки возможность работать с любым из таких устройств одинаково, будь оно встроенным или подключенным через USB (в этом, собственно, и заключается идея драйвера). Для клавиатуры, мышки/тачпада, устройств хранения и звука это возможно. Отсюда и удивление, что для камеры это не так.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Вопрос в том, какие устройства он считает "посторонними". Он понимает, как минимум, audio (class 1), HID (class 3), mass storage (class 8). Но полного списка я навскидку найти не смог.
Каким API можно работать с HID-устройствами? Я такого API не видел. Есть только некий Bluetooth HID.
Здравствуйте, vsb, Вы писали:
ЕМ>>Вопрос в том, какие устройства он считает "посторонними". Он понимает, как минимум, audio (class 1), HID (class 3), mass storage (class 8). Но полного списка я навскидку найти не смог.
vsb>Каким API можно работать с HID-устройствами? Я такого API не видел. Есть только некий Bluetooth HID.
Как обычно открываешь файл и пишешь/читаешь кадрами по 65 байт.
Здравствуйте, kov_serg, Вы писали:
ЕМ>>>Вопрос в том, какие устройства он считает "посторонними". Он понимает, как минимум, audio (class 1), HID (class 3), mass storage (class 8). Но полного списка я навскидку найти не смог.
vsb>>Каким API можно работать с HID-устройствами? Я такого API не видел. Есть только некий Bluetooth HID. _>Как обычно открываешь файл и пишешь/читаешь кадрами по 65 байт.
Здравствуйте, vsb, Вы писали:
vsb>Каким API можно работать с HID-устройствами?
Увы, я не спец по Android API. Но USB-адаптеры клавиатур и мышей понимаются издавна. Может, конечно, там совместимость на уровне линукса, но ничто не мешает иметь такую же и для камер.
Сегодня получил еще один эндоскоп (тонкий, 5.5 мм — позарился на дешевое предложение, шоб було).
VID 1902, PID 8301. заявляет поддержку YUY2 uncompressed и разрешений 640x480, 320x240 на 5, 15, 30 Гц.
Не работает ни с одним из рекомендуемых в инструкции приложений (CameraFi, Inskam, USBWebCamera) на обоих имеющихся у меня андроидофонах — все они тупо показывают черный экран. Хотя на Xiaomi с CameraFi работает несколько секунд, затем приложение виснет.
Под Win7 работает со Skype, не работает с любой версией VLC. VLC никаких ошибок не выдает — просто тихо не открывает окна просмотра.
Под Win11, в ее родном окошке в настройках, работает несколько секунд, и виснет.
Под XP, в ее родном "Scanners and cameras" — работает стабильно.
Склоняюсь к выводу о том, что дело не в драйверах, а в какой-то радикальной кривизне большей части видеософта, которой требуется определенное поведение камеры. Если камера ведет себя "не как обычно" (но, вполне возможно, технически допустимо) — софт идет вразнос.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Году в 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-камер?
Почему требование рута для установки драйверов ты называешь ужасом? Это совершенно нормальная ситуация. Это компьютер, на нём никсовая операционная система. Что за консьюмеризм? Меня вот больше бесит, что рут не идёт из коробки. Это, понятно, сделано, чтобы анальные зонды нельзя было так просто деинсталлировать.
А что касается, почему бы их не преинсталлить, так XP после установки занимала до 3.5 гиг. Понятно, что сейчас хранилище подешевело, а во времена 4.2 это было сильно дофига.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Если в образе нет драйвера UVC, то не должны работать никакие камеры. Ну, или какие-то могут опознаваться по VID/PID, но это опять же означает, что все сделано через задницу.
Если там нет родного ядерного драйвера, то приложухи могут его навелосипедить в юзерспейсе через libusb / libuvc. Так, например, делает уже упоминавшийся ранее camerafi.
Работоспособность и качество таких велосипедов может сильно варьироваться.
Здравствуйте, Alekzander, Вы писали:
A>Почему требование рута для установки драйверов ты называешь ужасом?
Не "драйверов вообще", а конкретно драйверов USB-камер. Просто потому, что "драйвер" — это магическая сущность, которая либо есть, и тогда все работает, либо ее нет, и тогда не работает ничего. Это вполне себе банальный код, ответственный за управление устройством. И повышенные права необходимы только для установки самого основного, жизненно необходимого кода, без которого устройство не может обслуживаться системой и использоваться приложениями.
И в *nix, и в винде драйверы разделены на два уровня — режима ядра и режима пользователя. Для установки первых нужны административные права, вторые требуют повышенных прав только при установке в виде общесистемного ресурса. Без драйверов ядра устройства вообще никак не могут быть использованы, а драйверы режима пользователя (по сути, это просто динамические библиотеки) нужны лишь для унификации интерфейсов, чтобы каждое приложение не тащило с собой один и тот же код.
Исходя из того, что режим preview в XP прекрасно работает во всеми USB-камерами, что мне попадались, все типовые режимы и форматы были отработаны еще минимум двадцать лет назад. Что-то из этого было реализовано в ядре, остальное — в общесистемных фильтрах DirectShow. Если в андроиде этот минимум не реализован искаропки, и требует тащить свой код либо в приложении, либо устанавливать системные драйверы через рут — это ужас и есть, без вариантов.
A>больше бесит, что рут не идёт из коробки. Это, понятно, сделано, чтобы анальные зонды нельзя было так просто деинсталлировать.
Не только. В первую очередь для того, чтоб типовой юзер не нацеплял на себя всякого дерьма в первый же день пользования телефоном. За счет этого смартфонные приложения в целом безопаснее компьютерных. Другого способа помешать типовому юзеру собирать всякую дрянь пока не придумали.
A>почему бы их не преинсталлить, так XP после установки занимала до 3.5 гиг.
Я Вас умоляю. Там весь код, обслуживающий базовые потребности видеоустройств, занимает от силы несколько мегабайт.
Здравствуйте, andrey.desman, Вы писали:
AD>Если там нет родного ядерного драйвера, то приложухи могут его навелосипедить в юзерспейсе через libusb / libuvc.
Фишка в том, что в XP ядерный драйвер usbvideo.sys (только он и работет в режиме ядра из всей видеокухни) существует с начала 2000-х и имеет размер 120 килобайт. Остальная кухня, потребная для использования видеоустройств в DirectShow, существует с тех же времен, занимает максимум единицы мегабайт. Почему в андроиде это давным-давно не устаканено — большой вопрос. Другой вопрос — почему в этих приложениях до сих пор не поддерживаются функции соответствующего класса USB.
Здравствуйте, Евгений Музыченко, Вы писали:
ЕМ>Фишка в том, что в XP ядерный драйвер usbvideo.sys (только он и работет в режиме ядра из всей видеокухни) существует с начала 2000-х и имеет размер 120 килобайт. Остальная кухня, потребная для использования видеоустройств в DirectShow, существует с тех же времен, занимает максимум единицы мегабайт. Почему в андроиде это давным-давно не устаканено — большой вопрос. Другой вопрос — почему в этих приложениях до сих пор не поддерживаются функции соответствующего класса USB.
Ты сравниваешь ПК с телефоном. Универсальную ОС с заточенным под конкретное железо и сценарии использования дистрибутивом... Результат немного предсказуем.
Здравствуйте, andrey.desman, Вы писали:
AD>Ты сравниваешь ПК с телефоном. Универсальную ОС с заточенным под конкретное железо и сценарии использования дистрибутивом...
Не будь "заточенное" в разы требовательнее к ресурсам, чем "универсальное" — не сравнивал бы.
Ну и перед реализацией этой "заточенной" была WinCE/Mobile, которая по "персональной" функциональности не слишком отличалась от XP. Так что гугелю не прокатит оправдание в стиле "мы были первыми, мы не знали".
Если андроид подо что и заточен, то прежде всего под самые примитивные сценарии использования, но за счет совершенно неимоверной (в пересчете на функциональность) ресурсоемкости. Это и раздражает, что не в коня корм.