Форум обсуждения систем  

Вернуться   Форум обсуждения систем "Умный дом", проектов Ардуино, OpenWRT и других DIY устройств > Форум умного дома > Сделай сам > OpenWRT/LEDE

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
Старый 05.11.2015, 14:55   #1
sunny
Senior Member
 
Аватар для sunny
 
Регистрация: 22.10.2015
Адрес: Там где сосны и песок
Сообщений: 1,534
Вес репутации: 1600
sunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to all
По умолчанию Вебкамера, высокое разрешение, fsp и роутер со слабым железом

Наш уважаемый коллега Legich5.
Предложил сообществу:
http://geektimes.ru/post/265186/
О чем нам и сообщил наш коллега ALS:
http://cyber-place.ru/showpost.php?p=28772&postcount=35
свой вариант решения проблемы связки вебкамера-роутер - низкое разрешение и малое кол-во fsp при трасляции и записи видео.

Решение проблемы он разбил на два этапа.

Первый этап - патч для драйвера uvc:
Цитата:
Анализ кода драйвера и первый успех
Изучая код я пришел к выводу, что размер буфера спрашивается у камеры и моя камера возвращала размер несжатого кадра. Наверное это самое безопасное решение с точки зрения разработчиков камеры. Но оно же самое не оптимальное. Я решил, что для своего случая можно скорректировать необходимый размер буфера, используя экспериментальный коэффициент минимального сжатия. Я выбрал k=5. С таким значением у меня был запас порядка 20%.
Цитата:
Добавив коррекцию размера буфера, я получил стабильную работу в режиме 1280х720 и даже в режиме 1920х1080. Ура! Половина задачи решена!
Мое повторение патча драйвера в итоге выглядит так:

Собираем прошивку с нуля:
Код:
git clone git://git.openwrt.org/15.05/openwrt.git
cd ./openwrt
./scripts/feeds update -a
./scripts/feeds install -a
make defconfig
make prereq
Копируем свои файлы по папкам:

Драйвер uvc расположен в директории:

./openwrt/build_dir/target-вашего-роутера/linux-вашего-роутера/linux-3.18.23/drivers/media/usb/uvc

Нам нужно внести изменения в 3 файла:
- uvc_driver.c - 8 строчек
- uvcvideo.h - 1 строчка
- uvc_video.c - 10 строчек (менять значения в трех под свою камеру)

Можно сделать это патчем разместив его:
./openwrt/target/linux/папка_вашего_роутера/patches-3.18/850-uvc-quirk-compression-rate.patch

И собрав прошивку.
Соответственно: патч добавляет строчки в указанные номера строк:
Код:
@@ -113,6 +113,14 @@
@@ -148,8 +148,9 @@
@@ -2102,6 +2102,16 @@
там где впереди + значит эта строка добавляется в файл.
Строки без + уже содержаться в файле.

Можно просто поправить 3 этих файла и закинуть их после сборки без прошивки без патча в папку с заменой файлов.

Прилагаю 3 файла в архиве, но в uvc_driver.c вам необходимо внести изменения самостоятельно - под вашу камеру.

Это можно сделать подключившись к роутеру по ssh и выполнив
Код:
dmesg | grep UVC
Увидите строчку вида:
Код:
[ 14.470000] uvcvideo: Found UVC 1.00 device USB 2.0 Camera (0c45:62c0)
Копируем 0c45:62c0 в поисковик и смотрим, что она нам выдаст.
http://www.ideasonboard.org/uvc/ - пользуемся функцией "Найти" у браузера.

И добавляем в uvc_driver.c свою камеру:
Код:
/* Microdia Sonix USB 2.0 Camera */
	{ .match_flags		= USB_DEVICE_ID_MATCH_DEVICE
                                | USB_DEVICE_ID_MATCH_INT_INFO,
	  .idVendor             = 0x0c45,
	  .idProduct		= 0x62c0,
	  .bInterfaceClass	= USB_CLASS_VIDEO,
	  .bInterfaceSubClass	= 1,
	  .bInterfaceProtocol	= 0,
	  .driver_info		= UVC_QUIRK_RESTORE_CTRLS_ON_INIT
                                | UVC_QUIRK_COMPRESSION_RATE },
Пробелы удаляем, и делаем их клавишей TAB.
===
Если компилируем с патчем:
Выполняем :
Код:
make menuconfig
Сохраняем Save в .config
Запускаем:
Код:
make V=s
===
Если подкладываем готовые файлы в:
./openwrt/build_dir/target-вашего-роутера/linux-вашего-роутера/linux-3.18.23/drivers/media/usb/uvc
uvc_driver.c, uvcvideo.h, uvc_video.c

Можно удалить все скомпилированные файлы из папки:
./openwrt/bin/папка_вашего_роутера/
и сразу снова выполнить:
Код:
make V=s
===
Проверить работу можно подключившись к роутеру по ssh и выполнив:

Код:
grep dwMaxVideoFrameSize /lib/modules/3.18.23/uvcvideo.ko
Вывод вида:

Код:
root@OpenWrt:~# grep dwMaxVideoFrameSize /lib/modules/3.18.23/uvcvideo.ko
3uvcvideo: dwMaxVideoFrameSize fixed to %d.
А также выполнив:

Код:
lsmod
Код:
videobuf2_core         28748  1 uvcvideo
videobuf2_memops        1216  1 videobuf2_vmalloc
videobuf2_vmalloc       2145  1 uvcvideo
Ваши предложения, критика, уточнения, опровержения и прочий конструктив по теме только приветствуются

Архив патч: target.zip распаковать и закинуть с подтверждением замены файлов, в корень ./openwrt.
Архив: build_dir.zip распаковать и закинуть с подтверждением замены файлов, в корень ./openwrt после компиляции прошивки без патча и снова выполнить make V=s

Править только файл uvc_driver.c - под вашу камеру.
Вложения
Тип файла: zip target.zip (2.4 Кб, 116 просмотров)
Тип файла: zip build_dir.zip (58.1 Кб, 106 просмотров)

Последний раз редактировалось sunny; 12.11.2015 в 00:04.
sunny вне форума   Ответить с цитированием
Старый 05.11.2015, 20:40   #2
sakatgg
Senior Member
 
Регистрация: 15.07.2014
Сообщений: 939
Вес репутации: 989
sakatgg is just really nicesakatgg is just really nicesakatgg is just really nicesakatgg is just really nicesakatgg is just really nice
По умолчанию Re: Вебкамера, высокое разрешение, fsp и роутер со слабым железом

Цитата:
Разные камеры поддерживают разные опции. Чтобы понять, что поддерживает ваша камера, можно воспользоваться утилитой qv4l2, подобрать нужные вам параметры и затем добавить настройку в утилиту.
Цитата:
Если ваша камера также возвращает завышенный размер необходимого буфера, то надо добавить использование quirk UVC_QUIRK_COMPRESSION_RATE для вашей камеры в файле uvc_driver.c.
Logitech C270 - так понимаю не поддерживает UVC_QUIRK_COMPRESSION_RATE?
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок-V4L2 Test Bench.png
Просмотров: 1478
Размер:	13.8 Кб
ID:	3221   Нажмите на изображение для увеличения
Название: Снимок-V4L2 Test Bench-1.png
Просмотров: 244
Размер:	15.6 Кб
ID:	3222   Нажмите на изображение для увеличения
Название: Снимок-V4L2 Test Bench-2.png
Просмотров: 229
Размер:	14.0 Кб
ID:	3223  
sakatgg вне форума   Ответить с цитированием
Старый 05.11.2015, 21:36   #3
Legich5
Junior Member
 
Регистрация: 05.11.2015
Сообщений: 26
Вес репутации: 0
Legich5 is an unknown quantity at this point
По умолчанию Re: Вебкамера, высокое разрешение, fsp и роутер со слабым железом

Добрый день,

"Logitech C270 - так понимаю не поддерживает UVC_QUIRK_COMPRESSION_RATE?"

Вопрос не совсем корректный. UVC quirks это набор костылей для различных проблем с камерами. В файле uvc_driver.c есть массив uvc_ids который определяет какие костыли включить для каждой камеры. Это - настройки по-умолчанию. Есть возможность задать quirks при загрузке драйвера в ручную, но это не очень удобно.

Для вашей камеры надо определить следующее:
* Поддерживает ли она MJPG режимы.
* Определить idVendor и idProduct для камеры. Это можно сделать на PC c Linux используя команду lsusb. Например для моей камеры:
oleg@xcom-5x:~$ lsusb
Bus 003 Device 002: ID 046d:0823 Logitech, Inc.

* Найти в массиве uvc_ids запись соответствующую вашей камере (по idVendor и idProduct).
* Добавить флаг UVC_QUIRK_COMPRESSION_RATE в поле driver_info.

Можно проще, но потеряв в гибкости. Флаг UVC_QUIRK_COMPRESSION_RATE используется в файле uvc_video.c, строка 117. Надо изменить условие чтобы максимальный размер фрейма всегда корректировался для MJPG режимов.
Legich5 вне форума   Ответить с цитированием
Старый 05.11.2015, 21:41   #4
Legich5
Junior Member
 
Регистрация: 05.11.2015
Сообщений: 26
Вес репутации: 0
Legich5 is an unknown quantity at this point
По умолчанию Re: Вебкамера, высокое разрешение, fsp и роутер со слабым железом

Чтобы определить поддерживает ли камера MJPG режимы надо на картинке



посмотреть какие есть опции в списке Capture Image Formats.
Legich5 вне форума   Ответить с цитированием
Старый 05.11.2015, 23:46   #5
sakatgg
Senior Member
 
Регистрация: 15.07.2014
Сообщений: 939
Вес репутации: 989
sakatgg is just really nicesakatgg is just really nicesakatgg is just really nicesakatgg is just really nicesakatgg is just really nice
По умолчанию Re: Вебкамера, высокое разрешение, fsp и роутер со слабым железом

Цитата:
* Найти в массиве uvc_ids запись соответствующую вашей камере (по idVendor и idProduct).
* Добавить флаг UVC_QUIRK_COMPRESSION_RATE в поле driver_info.
Моей там не было, изменил в секции /* Microdia Sonix USB 2.0 Camera */
на свои (файл приложил).
Миниатюры
Нажмите на изображение для увеличения
Название: Снимок-V4L2 Test Bench.png
Просмотров: 273
Размер:	13.9 Кб
ID:	3225  
Вложения
Тип файла: rar uvc_driver_C270.rar (14.4 Кб, 102 просмотров)
sakatgg вне форума   Ответить с цитированием
Старый 06.11.2015, 02:13   #6
sakatgg
Senior Member
 
Регистрация: 15.07.2014
Сообщений: 939
Вес репутации: 989
sakatgg is just really nicesakatgg is just really nicesakatgg is just really nicesakatgg is just really nicesakatgg is just really nice
По умолчанию Re: Вебкамера, высокое разрешение, fsp и роутер со слабым железом

Скомпилировал прошивку с uvc2http, вместе с поддержкой usb, video (список пакетов приложил) . В dev/video0 есть, в процессах uvc2http - есть. Камера не включается (светодиод не горит), и по http://192.168.1.1:8081 нет ничего (в Opera,Chrome,VLC). Файлы использовал уже патченные от sunny, и uvc_driver.c, который выше выложил. Через терминал порт 192.168.1.1:8081 пингуется нормально. Подключал также другую Logitech C510, такая же история. Роутер Netgear 3800(ar71xx)

P.S. Заметил в uvc_driver.c
этот параметр только у Logitech HD Pro Webcam C920 (для Logitech HD Webcam C270 такой же поставил)
.bInterfaceClass = USB_CLASS_VIDEO,

У всех остальных Logitech по другому:
.bInterfaceClass = USB_CLASS_VENDOR_SPEC,

Может надо ставить этот последний?
Миниатюры
Нажмите на изображение для увеличения
Название: 2015-11-06_024802.jpg
Просмотров: 272
Размер:	225.2 Кб
ID:	3226   Нажмите на изображение для увеличения
Название: 2015-11-06_025531.jpg
Просмотров: 261
Размер:	44.4 Кб
ID:	3227  
Вложения
Тип файла: txt uvc2http_list-installed.txt (5.1 Кб, 148 просмотров)

Последний раз редактировалось sakatgg; 06.11.2015 в 03:14.
sakatgg вне форума   Ответить с цитированием
Старый 06.11.2015, 05:10   #7
sunny
Senior Member
 
Аватар для sunny
 
Регистрация: 22.10.2015
Адрес: Там где сосны и песок
Сообщений: 1,534
Вес репутации: 1600
sunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to all
По умолчанию Re: Вебкамера, высокое разрешение, fsp и роутер со слабым железом

Legich5
Доброе время суток .
Спасибо за отклик, рады видеть Вас здесь .
Нас очень заинтересовал ваш опыт.
Есть давнее желание добится от связки роутер+вебкамера(ip-камера) - функционала видеорегистратора.
http://cyber-place.ru/showpost.php?p=28334&postcount=4
Нами был установлен на openwrt 15.05 (14.07) motion+ffmpeg.
http://cyber-place.ru/showpost.php?p=28528&postcount=34
===
Используя "тонкую" настройку uvc драйвера по вашей технологии - я попытался получить более высокое разрешение и fsp записанных роликов с помощью motion+ffmpeg.
Использовал openwrt 15.05, веб камера (UVC,mjpeg):https://www.hama.com/00086510/hama-ac-150-webcam
Камера находиться в подъезде, доступ только через ssh, shell openwrt не поддерживает lsusb.
http://cyber-place.ru/showpost.php?p=28559&postcount=2
Удалось получить готовые видеоролики при разрешении 640x480 5-8 fsp (в свойствах файла)
В motion-е выставлено значение v4l2_palette 8 - mjpeg
===
Я пересобирал прошивки с вашим значением U5 и пробывал увеличить до U10.
В итоге нагрузка на железо действительно снизилась (top) загрузка процессора в пределах 73-83% (было 97-99%) память порядка 65-75%
Увеличилось время на создание видео ролика - а вот fsp готового ролика уменьшилось до значения 2 fsp.
===
Если окажите посильное содействие в решение данной задачи будем очень признательны....
Предыстория богатая:
http://mainloop.ru/linux-os/make-low...fi-webcam.html
http://autohome.org.ua/12-openwrt/16...mery-v-openwrt
http://wifine.com.ua/index.php/17-ho...o-surveillance
http://habrahabr.ru/post/208058/
http://geektimes.ru/post/258168/
http://habrahabr.ru/post/190728/
http://wiki.first-leon.ru/index.php/...B5%D1%80%D1%83
sunny вне форума   Ответить с цитированием
Старый 06.11.2015, 09:41   #8
Legich5
Junior Member
 
Регистрация: 05.11.2015
Сообщений: 26
Вес репутации: 0
Legich5 is an unknown quantity at this point
По умолчанию Re: Вебкамера, высокое разрешение, fsp и роутер со слабым железом

Добрый день, sakatgg. Надо посмотреть что происходит в системе:
* пришлите лог с системы: dmesg > dmesg.log
* посмотреть сколько свободно помяти в системе: free > free.log
Legich5 вне форума   Ответить с цитированием
Старый 06.11.2015, 09:59   #9
Legich5
Junior Member
 
Регистрация: 05.11.2015
Сообщений: 26
Вес репутации: 0
Legich5 is an unknown quantity at this point
По умолчанию Re: Вебкамера, высокое разрешение, fsp и роутер со слабым железом

Дополнение к тому как получить лог от драйвера UVC. Здесь оригинал на английском.
1. Включить трассировку в драйвере UVC:
sudo echo 0xffff > /sys/module/uvcvideo/parameters/trace
2. Перезапустить uvc2http:
/etc/init.d/uvc2http reload
3. Собрать лог:
dmesg > dmesg.log
4. Отключить трассировку:
sudo echo 0 > /sys/module/uvcvideo/parameters/trace
Я не могу сейчас проверить команды на железе, поэтому возможно их надо подправить.

В этом же логе можно найти идентификаторы idVendor и idProduct, например так:
dmesg | grep UVC
и поискать глазками.

Sunny, возможно в вашем случае узкое место это motion и ffmpeg. Увеличив разрешение вы увеличили объем данных которые они обрабатывают. Я посмотрю детальней, но только на выходных.
Legich5 вне форума   Ответить с цитированием
Старый 06.11.2015, 10:43   #10
sunny
Senior Member
 
Аватар для sunny
 
Регистрация: 22.10.2015
Адрес: Там где сосны и песок
Сообщений: 1,534
Вес репутации: 1600
sunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to allsunny is a name known to all
По умолчанию Re: Вебкамера, высокое разрешение, fsp и роутер со слабым железом

Цитата:
Я посмотрю детальней, но только на выходных.
Да, конечно...
Готов выступить выступить в качестве подопытного для промежуточных версий
===
У sakatgg-а роутер:
Netgear WNDR3800
http://wiki.openwrt.org/toh/netgear/wndr3800
Достаточно мощное железо:
CPU:680MHz
Flash:16MiB
RAM:128MiB
===
У меня:
Asus RT-N14U
http://wiki.openwrt.org/toh/asus/rt-n14u
CPU:580MHz
Flash:16MiB
RAM:64MiB
===
Да shell OpenWrt отрабатывает:
Код:
dmesg | grep UVC
Как надо:
[ 14.470000] uvcvideo: Found UVC 1.00 device USB 2.0 Camera (0c45:62c0)

Последний раз редактировалось sunny; 06.11.2015 в 10:48.
sunny вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход


Текущее время: 14:35. Часовой пояс GMT +3.


Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Яндекс.Метрика