Unix admin - freebsd, мовлення відео з web-камери в мережу

З'явилася задумка, розмістити будинку дозиметр, направити на нього веб-камеру і знімати таким чином з нього дані.
Але з покупкою оного виникли проблеми - немає ніде в наявності, або ціна просто неадекватна.







Поки дозиметр в дорозі - вирішив зробити все необхідне для мовлення з веб-камери.

Розміщувати дозиметр вирішив на балконі, відразу наведу схему - що де знаходиться. Схема закінчена, чому саме така вийшла - трохи нижче.

Unix admin - freebsd, мовлення відео з web-камери в мережу

Отже, в коридорі стоїть комп'ютер, який виконує функції маршрутизатора / файл-сховища / тестового полігону. На балконі стоїть веб-камера, яка дивиться на вулицю і в задумом - передає зображення на комп'ютер.

Спочатку, веб-камера була підключена до комп'ютера через два usb подовжувача (3м + 5м). Але при такому підключенні вона ні в яку не хотіла визначатися. Тому було прийнято рішення - купити usb-хаб (D-Link DUB-1040), вартість якого коливається в районі 250р. в нашому провінційному містечку :) Після чого вона прекрасно розпізнає.

Комп'ютер працює під управлінням ОС FreeBSD. Спочатку все перевірки на ноутбуці з Windows 7. Після успішного отримання зображення з веб-камери розпочався наступний етап - змусити її працювати під FreeBSD.

ugen0.3 - це якраз USB-хаб, а ugen0.4 - це камера, яка підключена через нього. Все обладнання визначилося і готове до роботи.

Наступний етап - це установка драйверів для веб-камери. Нещодавно під FreeBSD був портований набір драйверів для веб-камер з Linux, який входить в порт multimedia / webcamd.






Встановлюємо цей порт:

Відразу запихає в /boot/loader.conf завантаження модуля cuse4bsd і довантажувати його:

Рідний rc-скрипт для webcamd (/usr/local/etc/rc.d/webcamd) нікуди не годиться, тому наводимо його до такого виду:

і додаємо наступні рядки в /etc/rc.conf:

ugen0.4 - це номер пристрою на USB-шині, яке відповідає веб-камері. У моєму випадку - це ugen0.4. список пристроїв на USB-шині можна подивитися за допомогою команди usbconfig.

На цьому установка webcamd завершена. Запускаємо його, і перевіряємо. У разі успіху має з'явиться новий пристрій / dev / videoN:

Все в порядку, камера готова до роботи.

Збираємо ffmpeg (/ usr / ports / multimedia / ffmpeg), попередньо відключивши в ньому все, крім оптимізації і ffserver:

Слід звернути увагу - що з якоїсь причини у FreeBSD виключена підтримка video4linux. Для виправлення цієї ситуації заходимо в папку / usr / ports / multimedia / ffmpeg / files і дивимося на файл patch-configure:

Все, що виділено - видаляємо. Вийде щось на зразок цього:

Збираємо і встановлюємо ffmpeg:

І перевіряємо, що він зібраний з підтримкою video4linux:

Тепер приступаємо до налаштування ffserver. Побіжно окинувши базовий конфиг для нього, пишемо свій. Мій придбав такий вигляд:

Наводимо в порядок rc-скрипт ffserver:

і дозволяємо його запуск в /etc/rc.conf наступним рядком:

ffserver готовий до роботи, тепер залишилося згодувати йому потік - і він почне його транслювати. Для цього пишемо скрипт, на зразок цього:

Все працює, вхідний потік) Stream # 0.0: Video: rawvideo, yuv420p, 640 × 480, 55296 kb / s, 15 tbr, 1000k tbn, 15 tbc) пережимається в вихідний (Stream # 0.0: Video: flv, yuv420p, 640 × 480, q = 2-31 1000 kb / s, 1000k tbn, 15 tbc). Використовується кодек flv.
Нижня рядок показує оперативну інформацію, скільки кадрів оброблено, частота кадрів, якість, розмір потоку, час та інші ...

Подивитися, що вийшло у мене - можна тут.

Але тим не менше, проект постійно розвивається і сподіваюся незабаром ці косяки будуть усунені.

На поточний момент в стабільній гілці ffmpeg під FreeBSD існує косяк з блокуванням сокета, через що процесор завантажується на 100%, рішення даної проблеми можна подивитися тут.

Якщо кому цікаво - можу викласти фото, як все розмістилося це вживу :)