Просматриваем видеопоток с камеры Raspberry Pi через веб–браузер
Оценка пользователей: / 5
ПлохоОтлично 
Stream Raspberry PiРассмотрим, как превратить Raspberry Pi в сервер вебкамеры. Вы сможете просматривать видеопоток с камеры на любом устройстве через веб -браузер. Им также может быть iPad/iPhone и Android.
Официальный способ формирования потока
В предыдущей статье о модуле камеры показан способ передачи потокового видео от Raspberry Pi на другой компьютер. Этот метод работает следующим образом:
  • На Pi используется утилита raspivid для кодирования видео с камеры в формате H.264.
  • Видеопоток передается по конвейеру утилите nc, которая «проталкивает» его на указанный сетевой адрес, где есть видеоплеер.
  • На компьютере с проигрывателем nc принимает поток и направляет его в mplayer для проигрывания.
Это эффективный метод потокового видео от Pi к другому компьютеру, но он имеет несколько проблем:
  • Raspberry Pi необходимо знать адрес компьютера, на котором проигрывается видео.
  • Компьютер, на котором проигрывается видео, должен иметь установленным современный плеер, который может проигрывать «сырой» видеопоток H.264. Нет такого мобильного устройства, который может это делать.
  • Поскольку эта система опирается на прямую связь между Pi и проигрывателем, то нельзя компьютер с проигрывателем подключить и/или отключиться от потока - соединение должно быть все время.
  • Что делать, если есть два или три конкурентные проигрыватели? Все становится ужасно сложным для Pi.
Поэтому стоит поискать другие решения, чтобы получить возможность просматривать видеопоток, например, в своем браузере.
Потоковые протоколы
Думаю, что важным требованием для потоковой камеры является возможность простого ее просмотра. Часто это означает, что поток должен быть воспроизводимым в веб-браузере. Запуск пользовательского проигрывателя является осложнением, потому что делает его недоступным для большинства мобильных устройств.
Есть несколько современных потоковых протоколов для веб-браузеров. Например, HLS является выбором компании Apple, поэтому он имеет широкую поддержку на мобильных iУстройствах, но не на других. Другой, называется Fragmented MP4, поддерживается Adobe и Microsoft, но требует плагины к браузеру от этих компаний для проигрывания на компьютере, поэтому компьютеры с ОС Windows и Mac могут это сделать, а Linux и мобильные устройства - нет. HTML5-видео также основано на формате MP4, но не такая уж и широкая поддержка.
Кроме того, для всех вышеперечисленных потоковых протоколов существует необходимость иметь потоковый сервер, который готовит видео для потоковой передачи, сегментируя его и упаковывая, и, хотя есть несколько утилит с открытым исходным кодом, который может сделать это для статического видеопотока, автор не нашел ни одного, который может сделать это для живого потока, за исключением новинок ffmpeg, доступных для Raspbian, которые могут генерировать живой поток HLS.
Какие другие варианты?
Motion JPEG на помощь
Исследуя, как делают это IP веб-камеры, можно увидеть, что многие из них используют старый потоковый протокол под названием Motion JPEG или сокращенно MJPEG.
Что такое Motion JPEG? Довольно легко - это просто поток отдельных JPEG фотографий, одна за другой. Автор был удивлен, обнаружив, что большинство современных браузеров могут проигрывать MJPEG потоки.
Обратной стороной MJPEG потоков является то, что они не настолько эффективны, как H.264, который значительно повышает качество и уменьшает размер путем кодирования только отличия одного кадра от другого. С MJPEG каждый кадр кодируется для всего изображения JPEG. Иногда это не имеет значения.
Продолжая исследования, автор нашел MJPG-стример с MJPEG потоковым сервером с открытым исходным кодом, написанный на С, который легко можно собрать для Raspberry Pi.
Следующие разделы описывают, как использовать этот инструмент для создания очень гибкого, для запуска в любом месте, потокового сервера для камеры Raspberry Pi.
1. Установите сборки зависимостей
Следующая команда устанавливает три библиотеки, которые использует MJPG-Streamer:
$ sudo apt-get install libjpeg8-dev imagemagick libv4l-dev
2. Добавьте отсутствующий videodev.h
Файл заголовка videodev.h, который необходим MJPG-Streamer, был заменен с videodev2.h. Чтобы MJPG-Streamer был «счастлив», Вы должны создать символическую ссылку:
$ sudo ln -s /usr/include/linux/videodev2.h /usr/include/linux/videodev.h
3. Загрузите MJPG-Streamer
Исходный код для MJPG-Streamer доступен на sourceforge.net, но сложно найти прямую ссылку для загрузки:
$ wget http://sourceforge.net/code-snapshots/svn/m/mj/mjpg-streamer/code/mjpg-streamer-code-182.zip
4. Распакуйте исходный код MJPG-Streamer
Исходный код загрузки представляет собой сжатый ZIP-файл. Поместите файл в Вашу домашнюю директорию (или временную папку, если предпочитаете ее) и выполните следующее извлечения файлов:
$ unzip mjpg-streamer-code-182.zip
5. Постройте MJPG-Streamer
MJPG-Streamer поставляется с несколькими плагинами, но только несколько из них необходимы для потокового видео. Следующая команда создает только то, что нам необходимо:
$ cd mjpg-streamer-code-182/mjpg-streamer
$ make mjpg_streamer input_file.so output_http.so
6. Встановите MJPG-Streamer
Следующие команды скопируют все необходимые файлы в системные директории:
$ sudo cp mjpg_streamer /usr/local/bin
$ sudo cp output_http.so input_file.so /usr/local/lib/
$ sudo cp -R www /usr/local/www
7. Включите камеру
Мы почти у цели. Теперь настало время, чтобы запустить модуль камеры:
$ mkdir /tmp/stream
$ raspistill --nopreview -w 640 -h 480 -q 5 -o /tmp/stream/pic.jpg -tl 100 -t 9999999 -th 0:0:0 &
Конечно, Вы можете использовать другие опции raspistill, если хотите.
8. Запустите MJPG–Streamer
Теперь камера записывает изображение, поэтому все, что осталось, это запустить MJPG-Streamer:
LD_LIBRARY_PATH=/usr/local/lib mjpg_streamer -i "input_file.so -f /tmp/stream -n pic.jpg" -o "output_http.so -w /usr/local/www"
Давайте ниже разберем эту команду, чтобы понять ее:
  • LD_LIBRARY_PATH задает путь к динамическим библиотекам в текущей директории. Это связано с тем , что приложение может найти плагины , которые находятся в той же директории.
  • -i устанавливает входной плагин. Плагин, который мы используем, называется input_file.so. Этот плагин просматривает директорию и в любое время обнаруживает записанный в нее файл JPEG, чтобы передать этот файл в поток. Папка для просмотра задается как аргумент -f.
  • -o устанавливает выходной плагин. Мы используем поточный плагин HTTP, который запускает веб-сервер, к которому можем подключиться, чтобы посмотреть видео. Корневой каталог веб задается как аргумент  -w. Мы будем использовать веб-страницы по умолчанию, которые приходят сразу с приложением, но они могут быть изменены и настроены по мере необходимости.
9. Смотрите Stream!
Теперь можете подключиться с помощью веб-браузера и смотреть потоковое видео. Если хотите смотреть с того же Raspberry Pi, можно ввести в адресной строке браузера http://localhost:8080.Если хотите смотреть с другого компьютера в Вашей сети - используйте http://<IP-адрес Raspberry Pi>:8080.
MPEG Pi
10. Уборка
После того, как убедитесь, что все работает, можно удалить исходный код:
$ cd ../../
$ rm -rf mjpg-streamer-182
Оновление с плагином raspicam
Автор наткнулся на вариант MJPG-Streamer на github, который поставляется с входным плагином raspicam. Используя эту версию MJPG-Streamer, можем пропустить raspistill и пусть плагин raspicam заботится о создании изображения. Вот как его установить.
# Установка dev-версії libjpeg:
sudo apt-get install libjpeg62-dev
# Установка cmake:
sudo apt-get install cmake
# Загрузка mjpg-streamer с плагином raspicam:
git clone https://github.com/jacksonliam/mjpg-streamer.git ~/mjpg-streamer
# Смена директории:
cd ~/mjpg-streamer/mjpg-streamer-experimental
# Компиляция
make clean all
# Замена старого MJPG-стримера:
sudo rm -rf /opt/mjpg-streamer
sudo mv ~/mjpg-streamer/mjpg-streamer-experimental /opt/mjpg-streamer
sudo rm -rf ~/mjpg-streamer
# Старт потока:
LD_LIBRARY_PATH=/opt/mjpg-streamer/ /opt/mjpg-streamer/mjpg_streamer -i "input_raspicam.so -fps 15 -q 50 -x 640 -y 480" -o "output_http.so -p 9000 -w /opt/mjpg-streamer/www" &
Старт/стоп скрипты оболочки (gist).
Автор считает, что это решение работает гораздо более гладко, чем предыдущее. Есть краткое видео, показывающее его в действии.
Заключение
Возможности того, что Вы можете сделать с Raspberry Pi, бесконечны. Автор надеется, что эта статья помогла Вам начать работу с простым потоковым видео на Raspberry Pi, используя удивительный модуль камеры. В следующих статьях рассмотрено, как просматривать потоковое видео с Pi в веб-браузере с помощью проигрывателя VLC и используя ffmpeg.
(По материалам EN: blog.miguelgrinberg.com)
 
>
КнигаНовости Практика поискаПартнерыО нас
Підтримка та дизайн: Могильний С.С. Шаблон: Joomla Templates by BuyHTTP Joomla Hosting