События‎ > ‎

Видеотрансляция с помощью веб-камеры на Raspberry PI

Отправлено 17 июн. 2013 г., 15:07 пользователем Олег Евсегнеев   [ обновлено 17 июн. 2013 г., 15:17 ]
В догонку к прошлой статье, коротко напишу о том, как на платформе Raspberry PI транслировать изображение с обычной USB-камеры в сеть. Лично мне, этот способ показался гораздо проще чем наладка трансляции на обычном ПК с Windows на борту.

Быстрый старт

1. Заходим в консоль и устанавливаем пакет libv4l-0

sudo apt-get install libv4l-0

2. Устанавливаем чудесный пакет mjpg-streamer-rpi

Можно скачать его через браузер по ссылке "http://www.bobtech.ro/get?download=36:mjpg-streamer-rpi", а можно с помощью wget:

wget http://www.bobtech.ro/get?download=36:mjpg-streamer-rpi

Полученный wget-ом файл со страшным названием переименовываем:

mv get\?download\=36\:mjpg-streamer-rpi mjpg-streamer-rpi.tar.gz

Ну и распаковываем:

tar -zxvf mjpg-streamer-rpi.tar.gz

3. Запускаем трансляцию

Делается это с помощью баш-скрипта прямо из папки с распакованным ранее архивом:

./mjpg-streamer.sh start


Если камера достаточно новая, и звезды на небе находятся в правильном положении, то видео поток станет доступен по URL вида:

http://raspberrypi:8080?action=stream

Также вы можете встроить это виде в html страничку используя тег img

<img src="http://raspberrypi:8080?action=stream"/>

Именно так я и делал при создании умного дома и телеуправляемого робота. Просто поднимал веб-сервер на Raspberry, и создавал стартовую HTML страничку с указанным кодом.

Если не взлетело

К сожалению, на пути к трансляции видео вас могут подстерегать разные неприятности. Во-первых, скрипт mjpg-streamer.sh может не запуститься, если его настройки не поддерживаются камерой. Во-вторых, видео может жутко тормозить.

Настраиваем параметры баш-скрипта

Для этого открываем его редактором nano:

sudo nano ./mjpg-streamer.sh

И видим там пять параметров:

VIDEO_DEV="/dev/video0" - идентификатор устройства.
FRAME_RATE="30" - частота кадров (FPS).
RESOLUTION="640x480" - разрешение
PORT="8080" - http порт
YUV="false" - флаг YUV кодирования

Три распространенные причины, по которым камера может вовсе не включиться:
  1. Камера не поддерживает указанное разрешение - попробуйте указать 320х240;
  2. Камера не поддерживает указанное значение FPS - попробуйте указать 15;
  3. Камера не поддерживает кодирование MJPEG - установите флаг YUV в значение true;
Распространенные причины по которым камера может тормозить:
  1. Камера не поддерживает аппаратное кодирование MJPEG - выкиньте камеру
  2. Указанные значения разрешения и FRAME_RATE не являются оптимальными - попробуйте перебрать другие значения

Полезные приложения

В ходе настройки видеотрансляции могут оказаться полезными следующие программы:

lsusb - показывает список всех подключенных USB устройств.

fswebcam - простое приложение для захвата видео и одиночных кадров с камеры. Кроме того, с помощью fswebcam можно узнать поддерживает ли ваша камера MJPEG кодирование. Устанавливается программа как обычно, через apt-get:

sudo apt-get install fswebcam

Затем делаем снимок с отчетом:

fswebcam --verbose

И получаем кучу букв, среди которых есть важная информация о поддерживаемых форматах. Например, у меня для камеры Logitech C110:

src_v4l2_set_pix_format,541: Device offers the following V4L2 pixel formats:
src_v4l2_set_pix_format,554: 0: [0x56595559] 'YUYV' (YUV 4:2:2 (YUYV))
src_v4l2_set_pix_format,554: 1: [0x47504A4D] 'MJPG' (MJPEG)


v4l2-ctl - приложение для настройки параметров камеры. Его также потребуется доустановить:

sudo apt-get install v4l-utils

После установки, можно посмотреть список доступных параметров:

v4l2-ctl --list-ctrls

Ну и попробовать их изменить:

v4l2-ctl --set-ctrl exposure_absolute=100

Но не рекомендую менять те параметры, о которых вы имеете слабое представление. Потом замаетесь заново учить камеру нормально видеть мир.


luvcview - приложение с графическим интерфейсом для интерактивного баловства с параметрами камеры. Ставим:

sudo apt-get install luvcview

Запускаем:

luvcview -s 640x480 -i 30

Меняя разрешение и частоту кадров, можно подобрать оптимальные значения, при которых камера будет давать наиболее быстрый поток. Также предостерегаю от неосторожного изменения настроек!


Напоследок отмечу, что мне с Logitech C110 удалось добиться только пяти кадров в секунду. При этом, я указал разрешение 640x480 и частоту кадров 30. В гугле я встречал заявления о 20 кадрах в секунду точно с такой же камерой! Как у них это получилось, для меня остается загадкой.

В следующий раз напишу о том, как удалось совместить описанный способ видеотрансляции и нашего учебного робота МР1 для создания телеуправляемой платформы.
Comments