Raspberry Pi и mjpg-streamer или видеотрансляция с "малины"

  • Автор
Это моя первая статья о Raspberry Pi.
Сначала думал сделать IP-камеру для наблюдения за машиной под окном, но угол обзора у камеры всего около 30 градусов. Потом думал сделать видеоняню и столкнулся с тем , что светочувствительность никакая. Даже ночник не помог. В итоге просто сделал камеру с доступом по сети ради простого любопытства.
Часть первая. Установка необходимого ПО

Что использовалось:
Raspberry Pi,
Raspberry Camera module,
Приложение для смартфона (на Android) IP Cam Viewer.
Программа захвата видео и трансляции в сеть mjpg-streamer
По поводу установки образа на «малину» я ничего писать не буду, поскольку это уже много раз описывалось.
Подразумевается, что Вы уже умеете это делать.
Итак приступим.
Подключаемся по SSH к «малине» и первое, что мы делаем это запускаем обновление
sudo apt-get update
sudo apt-get upgrade (процедура длительная, наберитесь терпения)
Затем заходим в raspi-config и включаем поддержку камеры sudo raspi-config


меняем значение с Disable на Enable

Перезагружаемся, снова коннектимся и устанавливаем дополнительные библиотеки и приложения, которые нужны для mjpg-streamer:
sudo apt-get install libjpeg8-dev
sudo apt-get install cmake
wget https://github.com/jacksonliam/mjpg-streamer/archive/master.zip
разархивируем
unzip ./master –d ./ms (ms я взял сам, чтобы не писать постоянно полное имя)
Переходим в папку
cd /ms/mjpg-streamer-master/mjpg-streamer-experimental
и собираем
make clean all
Изменяем файл start.sh командой
sudo nano ms/mjpg-streamer-master/mjpg-streamer-experimental/start.sh
убираем две незакомментрованные строки и пишем вместо них вот эти
cd etc/ms/mjpg-streamer-master/mjpg-streamer-experimental
./mjpg_streamer -o "./output_http.so -w ./www" -i "./input_raspicam.so -x 640 -y 480 -fps 10 -ex auto -awb auto -vs -ISO 100"

должно получиться вот так

"./output_http.so -w ./www" – вывод изображения на вебсервер
"./input_raspicam.so -x 640 -y 480 -fps 10 -ex auto -awb auto -vs -ISO 100" -- захват видео с камеры и параметры захвата (640х480, 10 к/с, экспозиция АВТО, автобаланс белого, вертикальная синхронизация и ISO 100). На самом деле все эти параметры можно убрать, оставив только разрешение и частоту кадров, остальное эт просто опции.
Далее выходим из редактора nano командой Ctrl+X, затем Enter (соглашаемся с изменением) и Y (да). Находясь в папке mjpg-streamer-experimental запускаем наш скрипт ./start.sh
Должно запуститься и в консоли увидите следующее:

и светодиод на камере должен загореться.
Выход командой Ctrl+C. Скрипт остановится и светодиод погаснет.
Далее с браузера заходим по такой ссылке: http://ip-address-raspberry:8080/?action=stream (где ip-address-raspberry – это IP Вашей «малины»)и попадаем на вебсервер, нажимаем на Stream.
Естественно Ваши устройства должны быть в одной сети: компьютер с Putty, «малина» и телефон с Ip Cam Viewer. Если Ваш комп не видит малину, Но Вы точно знаете что SSH имеет доступ, то вероятно у Вас роутер блокирует связь между устройствами. Я так однажды попал. Не наступайте на те же грабли :)
Теперь нам надо подключиться с телефона к нашей камере. Я использовал программу IP Cam Viewer, так как она содержит богатый функционал.
Что там нужно сделать, так это только добавить Вашу камеру :
нажимаем «меню», «управление камерами», затем «+» для добавления новой камеры, выбираем «стандартный адрес», Имя: любое; Производитель «Generic URL»; Модель «Generic URL»; URL «вписываем точно такой же адрес «: http://ip-address-raspberry:8080/?action=stream», затем нажимем «Тест» и если изображение с камеры получено, то сохраняем.
Теперь о настройках камеры. Сама камера тоже имеет много настроек изображения. Начиная от разрешения и частоты кадров, заканчивая наложением всяких эффектов. Подробно можно вязть описание с ресурса https://github.com/jacksonliam/mjpg-streamer/blob/master/README.md
Собственно с этого ресурса я взял всю информацию по настройке. Как Вы заметили, я взял разрешение камеры 640х480 и частоту кадров 10 к/с. Максимально возможные эти параметры 1920х1080х30.
Собственно вот результат:

А это на телефоне:

Комментарии:

crazysova7
Спасибо всё чётко и подробно.
Ivanserov8
Это мой первый пост, поэтому некоторые картинки у меня не вышло загрузить нормально. Если, что непонятно, постараюсь ответить.
kolya04
Статья интересная, но практически не получилось.

после " unzip ./master –d ./ms " ответил

«Archive: ./master.zip

45996ba372e6d87d82dd8338992996758fa7d376

caution: filename not matched: .d

caution: filename not matched: ./ms»

и на дальше все пошло с ошибками
ViZord1
А вот если это-же наберешь с клавы а не Ctrl-C — Ctrl-V, то заработает.

В этой строке символ "-" не тот по ascii. (обычный 45, а этот 8211). Для человеческого глаза это один символ, а для линукса это разные символы. :)
kolya04
Здравствуйте ViZord1, спасибо что ответили, но у меня после следующего шага опять все на так.

после «cd /ms/mjpg-streamer-master/mjpg-streamer-experimental»

отвечает "-bash: cd: /ms/mjpg-streamer-master/mjpg-streamer-experimental: No such file or directory"



ViZord1
а тогда вместо «cd /ms/mjpg-streamer-master/mjpg-streamer-experimental»

можно попробовать «cd ./ms/mjpg-streamer-master/mjpg-streamer-experimental»
kolya04
попробовал, получилось.

после "./start.sh" написал что запустилось, но через браузер не могу ничего увидеть,

По поводу того, что роутер что-то не пропускает, месяц назад пробовал запустить видеопоток на вебке, тогда все заработало, но не устроило качество вебки, и тогда все снес, сейчас все по-новой и ничего не устанавливал.Кстати, при запуске горит индикатор на самой камере, а видео почему-то нет.
kolya04
все заработало, но задержка приличная, я бы сказал больше чем с вебкой, порой 3-4 сек. использовать для мобильной платформы, с управление через сеть ну очень тормознуто все будет
Ivanserov8
задержка естественно будет. Если нужно уменьшить задержку, то надо понизить качество видео. Задержка практически пропадает на разрешении 640х480, а также можно уменьшить частоту кадров до 15 к/с
kolya04
Так и стояло 640х480, кадров не помню, но судя по тому что видео было с рывками явно меньше 25 кадров, но заметил если малина через Ethernet-кабель что задержки нет.
Ivanserov8
возможно у Вашего роутера не хватает производительности или у Вас WiFi-USB может не справляется с нагрузкой
OsDima
У меня заело на этом пункте



pi@raspbmc:/$ make clean all

-bash: make: command not found



У меня установлено RASBMC и этот пункта «raspi-config» нет
kolya04
не знаю как в RASPBMC, а в RASPBIAN нужно зайти в папку, а потом «make clean all», может и в RASPBMC так же.
Ivanserov8
Переходим в папку

cd /ms/mjpg-streamer-master/mjpg-streamer-experimental

и собираем

make clean all

не выходя из этой папки собираем.

make нужно установить.
Andy
Может кто-то пошагово объяснить как mgpg-streamer добавить в автозапуск, чтобы трансляция начиналась при включении RPi и как установить логин-пароль на просмотр видео через сеть ???
Ivanserov8
Почитайте здесь Как из Raspberry Pi сделать живую камеру.. Обязательно прочтите ниже комментарии
Ivanserov8
Внимание! Появились изменения! Пропала поддержка Rasberry Camera. При первой возможности я обновлю статью
alemleon
Хорошая статья, но застрял на том, что после запуска скрипта ./start.sh

выдается can't cd to ect/ms/mjpg-streamer-master/mjpg-streamer-experimental
Ivanserov8
Возможно опечатка где-то. Ругается на то, что не может перейти в папку по указанному адрессу
alemleon
Дело в том, что директории ect/ms/mjpg-streamer-master/mjpg-streamer-experimental у меня нет?
alemleon
Выполнял все инструкции, как в статье.
woofer
Здравствуйте!

Вы написали,

Если Ваш комп не видит малину, Но Вы точно знаете что SSH имеет доступ, то вероятно у Вас роутер блокирует связь между устройствами
Похоже у меня тот самый случай.

Малинка и компьютер в одной сети подключены к одному роутеру.

Подскажите пожалуйста как победить?
Ivanserov8
Отключите брандмауэр в роутере. Включите DHCP, если отключен.
itsagooddaytodie
Спасибо большое за статью! А может кто нибудь подскажет, где можно сменить порт стрима с 8080 на свой?
apssent
Супер! Спасибо автору. А как можно реализовать просмотр нескольких камер одновременно?
Ivanserov8
Нужно прописывать каждую камеру по ip-адресу в программу
apssent
Можно по подробнее?
Ivanserov8
Если у Вас несколько «Малин» с камерами, то просто соединяете их через «свитч»(при условии что у них статичные адреса). Если адреса присваиваются по DHCP, то через роутер.
apssent
Вы не совсем поняли мой вопрос, я имел ввиду вот что, можно ли к одной малине подключить допустим 2 камеры и просматривать с них изображение? Я где то видел статью, там товарищ к mjpg-streamer подключить две камеры и все работало. Вот хотелось бы узнать как он это сделал.
Ivanserov8
Можно, только вебкамеры тормозить будут. Я с одной пробовал, так понижал разрешение до 640х480 и только тогда становилась приемлемое качество. Вы спросите лучше у того, кто это сделал. А ещё лучше ссылку бы нам скинули сюда
Sanchopancho
Огромная благодарность автору статьи. Все заработало отлично(с учетом некоторых комментариев). По-моему это самая лучшая статья на эту тему во всем интернете. Я до этого просмотрел не менее 5-и статей на разных сайтах. Короче — здесь ничего лишнего и добавить нечего. (если что, я чайник в этих делах).
Sanchopancho
Уважаемый Ivanserov8, а не могли бы Вы описать на своем примере рассказать как разместить видео на сайте Народного мониторинга. Из других источников я не могу разобраться в каком файле нужно исправить порт для трансляции. (у меня книжка «Raspberri Pi практическое руководство».)Там хорошо все написано, но мутновато.
Ivanserov8
Опишите, пожалуйста, топологию Вашей сети: внешний (белый) IP имеется? Сможете настроить проброс портов на роутере? Вкратце опишу: имеем нашу камеру с поротом вывода 8080. Подключаем её к роутеру и получаем от него по DHCP IP для камеры. Далее на роутере настраиваем маршрутизацию на этот IP и указываем порт назначения 8080. Далее в народном мониторинге добавляете Вашу камеру но с белым IP-адресом и портом 8080. Адрес будет такой «yourip:8080/?action=stream». Я не задавался такой целью, поэтому это только в теории.
Ivanserov8
Ради интереса куплю внешний IP у провайдера и попробую все на деле.
Sanchopancho
Очень благодарен за внимание к чайнику. Я пока переварю Ваш ответ. А там видно будет. Тоесть, как я понял, мне всего лишь нужно инициализировать порт в роутере 8080. А белый IP-адрес это внешний, а не локальный?
Ivanserov8
Да это внешний. Все правильно поняли. Когда Вы будете в народном мониторинге указаывать Ваш внешний IP, то роутер автоматически переадрессует на локальный IP. В этом и есть суть проброса портов
Sanchopancho
… так. Теперь еще пару часиков с бубном попляшу…
Sanchopancho
Уважаемый Ivanserov8. С Вашей подсказкой, Божьей помощью и бубном все у меня заработало. С народного мониторинга получаю снимки. А по сети изображение почти без задержки. Премного благодарен!
Ivanserov8
Очень рад, что Вам помогли мои советы! Удачи в Ваших проектах.
Sanchopancho
Уважаемый Ivanserov8. А не подскажете ли Вы как установить файл start.sh в автозапуск. Я пробовал вставлять скрипт от Time-lapse камеры в /etc/rc.lokal — программа автоматически запускалась при включении Малины. А вот start.sh почему-то не запускается.И еще (если я Вам не надоел) — как находясь в консоли можно удалить системный файл. Или, если есть такая возможность, из-под графической оболочки.
Ivanserov8
я добавлял файл в init.d и автозапуск получался. Если используются два скрипта к одной камере, то естественно будет работать только тот скрипт, который первым запустился и инициализировал камеру. Удаление файлов команда rm под суперпользователем root.
titanium
Проблема с запуском с параметром -b (backgound mode) — пишет «forked to background (3324)» но такого процесса нет. А так две камеры не стартуют- только одна.
RelMayer
На данный момент 27.02.2015. Когда распаковываешь, то все оказывается в деректории home/pi/ там лежит ms, но не в etc/ms

По этой причине не находит его командой cd /etc/ms/mjpg-streamer-master/mjpg-streamer-experimental так как его там нету.

Как я исправил эту проблему, через WinSCP. Зашел с правами root. Переместил папку в раздел /etc/

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

pi@raspberrypi /etc/ms/mjpg-streamer-master/mjpg-streamer-experimental $ ./start.sh

./start.sh: 29: ./start.sh: ./mjpg-streamer: not found
RelMayer
./start.sh: 29: ./start.sh: ./mjpg_streamer: not found
Ivanserov8
29 — это строка в скрипте, где ошибка. Надо внимательно проверить путь. Потому как если Вы перенесли скрипт в другое место, то и путь в скрипте должен поменяться, поэтому и пишет not found
Ivanserov8
копирование в другую папку командой cp -R. Например cp -R ms /etc скопирует папку ms в /etc
RelMayer
Спасибо большое! Все получилось, но вышла еще одна проблема, у меня Wi-Fi отключается автоматически после 2-3 мин работы с этим приложением. Точно так же с Ethernet подключением.

Прим том, что я настроил, чтоб Wi-Fi не отключался вообще:

cat /sys/module/8192cu/parameters/rtw_power_mgnt

Чтобы отключить функцию управления питанием, нужно создать новый файл:

sudo nano /etc/modprobe.d/8192cu.conf и прописать строку

options 8192cu rtw_power_mgnt=0 де 0 — Управление питанием отключено
Sanchopancho
Уважаемый Ivanserov8. Подскажите пожалуйста что означает параметр -R при копировании и какие еще бывают параметры. И еще какой папирус мне почитать чтобы не задавать глупые вопросы. Огромное спасибо.
Ivanserov8
-R Если исходный_файл указывает на каталог, cp копирует этот каталог

вместе со всем деревом файловой иерархии, которое он содержит. Ес-

ли исходный_файл оканчивается на /, копируется не сам каталог, а

только его содержимое. Эта опция также указывает на необходимость

копирования символических ссылок, а не объектов, на которые они

указывают, и заставляет cp создавать специальные файлы вместо того,

чтобы копировать их, как обычные. Создаваемые каталоги имеют те же

права доступа, что и исходные каталоги, вне зависимости от действу-

ющего для процесса значения umask.

Я читаю книги Колесникова. Хороший писатель.
RelMayer
Уважаемый Ivanserov8. Не можете подсказать, в чем причина, когда запускаю скрипт ./start.sh. То через некоторе время Raspberry Pi абсолютно зависает.
Ivanserov8
А в чём проявляется зависание? Дистрибутив обновляли?
RelMayer
Последовательность как я настраивал малинку.

Установил ОС, настроил сразу в настройках камеру, SSH.

Обновил: sudo apt-get update sudo apt-get upgrad установил точно время типа sudo date -s «8 JAN 2015 12:00:00». обновил ядро sudo rpi-update

Настроил удаленный доступ, через Ethernet кабель и через Wi-Fi

Исправил проблему с Wi-Fi, он теперь работает постоянно целые сутки, а раньше тоже через некоторое время отключался из за того, что малинка его отключала от питания.

Установил для удаленного доступа sudo apt-get install xrdp.

Установил sudo apt-get install apache2 php5 libapache2-mod-php5

Дальше все как вы описали по посту делал только с некоторыми проблемами, что я указал выше.

Программа запустилась, Raspi Cam вела стрим, но через некоторое время малинка зависает, на сайт не заходит, графический интерфейс не реагирует не на что(мышку, клавиатуру). На камере самой, горит светодиод и на малинке тоже горят.
faraday
Прочитав статью не совсем понял, интересуют два вопроса:

1) можно ли транслировать видео 720p/30 при подключении малинки по ethernet?

2) можно ли архивировать видеофайл на внешний диск, или скажем на диск расшаренный по сети?
Ivanserov8
1) Да, конечно можете.

2) Средствами mjpg-streamer нельзя. Но Вы можете взять поток с «малины» другой программой. Я взял IP Can viewer. Можете попробовать прикрутить motion прям на самой «малине». Motion имеет гораздо больший функционал и предназначена для построения видеонаблюдения. Ещё есть AVReg. Отечественная разработка. Работает только на linux-машинах. Вся документация на русском.

Для написания комментариев необходимо зарегистрироваться