GrabDuck

Вебкамера, высокое разрешение, 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 и выполнив

Увидите строчку вида:

Код:

[ 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.
===
Если компилируем с патчем:
Выполняем :
Сохраняем Save в .config
Запускаем:
===
Если подкладываем готовые файлы в:
./openwrt/build_dir/target-вашего-роутера/linux-вашего-роутера/linux-3.18.23/drivers/media/usb/uvc
uvc_driver.c, uvcvideo.h, uvc_video.c

Можно удалить все скомпилированные файлы из папки:
./openwrt/bin/папка_вашего_роутера/
и сразу снова выполнить:

===
Проверить работу можно подключившись к роутеру по 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.
А также выполнив:

Код:

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 - под вашу камеру.


Последний раз редактировалось sunny; 12.11.2015 в 00:04.