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


Предыдущая | Следующая

Рассмотрим, как можно использовать Raspberry Pi для трансляции изображения с веб-камеры USB в сеть. Прежде всего подключим к Raspberry Pi веб-камеру USB. У меня в наличии имелись две веб-камеры: Defender Glory 327 и Logitech C270 — подключим сначала Defender Glory 327 (рис. 4.22).

Прежде всего в терминале устанавливаем пакет iibv4i-o:

sudo apt-get install libv4l-0

Далее необходимо установить пакет mjpg-streamer-rpi:

wget http://www.bobtech.ro/get?download=36:mjpg-streamer-rpi mv get\?download\=3 6\:mjpg-streamer-rpi mjpg-streamer-rpi.tar.gz tar -zxvf mjpg-streamer-rpi.tar.gz

Параметры потока можно настроить в файле mjpg-streamer.sh:

cd mjpg-streamer

sudo nano mjpg-streamer.sh

По умолчанию эти параметры имеют следующие значения:

* VIDEO_DEV="/dev/video0" — идентификатор устройства;

* frame_rate="30" — частота кадров (FPS);

* resolution="640x480" — разрешение;

* port="8080" — HTTP-порт;

* YUV="false" — флаг YUV-кодирования.

Изменяем необходимые для камеры Defender Glory 327 настройки:

* frame_rate="1" — частота кадров (FPS);

* resolution="320x240" — разрешение;

* YUV="true" — флаг YUV-кодирования.

Для запуска трансляции запускаем bash-скрипт mjpg-streamer.sh:

sudo ./mjpg-streamer.sh start

Остановка трансляции осуществляется командой:

sudo ./mjpg-streamer.sh stop

Видеопоток станет доступен по адресу (URL) следующего вида:

http://raspberrypi:8080?action=stream

Пример потокового изображения с камеры показан на рис. 4.23.

Надо отметить, что задержки показа изображения по сети достигали у меня 2-3 секунд. Аппаратное ускорение кодирования видео на Raspberry Pi отсутствует, а без него, программно, сжатие идет со скоростью 2-5 fps и на все 100 % загружает машину.

Пришлось пойти другим путем и применить GStreamer — мощный фреймворк1 для построения мультимедийных приложений, который позволяет создавать приложе­ния различных уровней сложности, начиная от простого консольного плеера и заканчивая полноценными аудио/видеоплеерами, мультимедийными редакторами и т. п. Мультимедийный программный комплекс GStreamer обладает интерфейсом в виде командной строки.

Для установки GStreamer в терминале выполним команду:

sudo apt-get install gstreamer0.10-plugins-base gstreamer0.10-plugins-good gstreamer0.10-plugins-ugly gstreamer0.10-tools

Для запуска потока на конкретный компьютер набираем в терминале:

sudo gst-launch-0.10 v4l2src device=/dev/video1 ! 'video/x-raw- yuv,width=640,height=480, framerate=20/1'! ffmpegcolorspace ! rtpvrawpay ! udpsink host=192.168.0.3 port=5100 sync=false

Здесь:

* device=/dev/video1 — камера-источник картинки;

* video/x-raw-yuv,width=640,height=480, framerate=20/1 — формат картинки;

* host=192.168.0.50 port=5100 — IP-адрес компьютера, куда посылается поток.

Видео передается по протоколу RTP. Этот протокол работает на транспортном уровне и используется при передаче трафика реального времени. На стороне ком­пьютера-получателя потока в терминале вводим:

gst-launch udpsrc caps="application/x-rtp, media=(string)video,clock-rate=(int)90000, encoding-name=(string)RAW, sampling=(string)YCbCr-4:2:0, depth=(string)8, width=(string)640, height=(string)480, ssrc=(uint)1825678493, payload=(int)96, clock-base=(uint)4068866987, seqnum-base=(uint)24582" port=5100 ! queue ! rtpvrawdepay ! queue ! ffmpegcolorspace ! autovideosink

и на компьютере-приемнике должны увидеть поток. Однако передать поток с веб­камеры Defender Glory 327 у меня не получилось, зато камера Logitech C270 (рис. 4.24) с задачей прекрасно справилась. Задержки сигнала при этом практиче­ски на было заметно.

1 Фреймворк — программное обеспечение, облегчающее разработку и объединение разных компонен­тов большого программного проекта.