1. В сообществе нашего форума Вконтакте создан раздел по продаже электронных компонентов.
    Каждый может продать в нем свои залежавшиеся детали. Подробности здесь.

Туториал RaspberryPiCamera v.1.3. Видео через интернет от Raspberry Pi

Тема в разделе "RaspberryPi/Cubieboard", создана пользователем radioengineer, 7 янв 2015.

  1. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.554
    Симпатии:
    352
    Адрес:
    Алматы
    Задача довольно проста, передать видео от Raspberry Pi, к которой подключена камера Raspicam через интернет на другой хост с windows, либо linux или даже macos. В этой теме буду потихоньку раскрывать нюансы и тонкости этого дела. Когда тема заполнится скомпилирую все сообщения и выложу статью в блог.
    Всего есть несколько вариантов передачи видео от raspberry pi.

    1367-00.jpg

    Официальный метод передачи видео

    Сообщество RaspberryPi предлагает свой официальный метод передачи данных с камеры RaspberryPiCamerav.1.3. Для это используется утилита raspivid, которая декодирует видеопоток H264 от камеры. Далее видеопоток через утилиту nc передается в интернет, на клиентском оборудовании также должен стоять nc, который принимает поток и воспроизводит его через mplayer.

    Недостатки этого метода заключаются в следующем:

    · RaspberryPi должен знать IP адрес компьютера клиента, где будет воспроизводиться видеопоток;
    · На компьютере должен быть продвинутый плеер для воспроизведения H264, а также утилита nc. Т.е. в обычном браузере видео воспроизвести уже нет возможности;

    Также в интернете дают информацию что связка netcat и mplayer дает 3-6 секундную задержку видео при передаче по WIFI. Вариант не очень хорош, если нужно принимать realtime видео поток.
     
  2. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.554
    Симпатии:
    352
    Адрес:
    Алматы
    MotionJPEG

    Хорошо зарекомендовавший себя протокол для IP камер. Представляет из себя поток отдельных JPEG изображений. Что важно протокол поддерживается большинством современных браузеров из коробки без каких-либо настроек со стороны клиента. Есть и недостатки, этот протокол не так эффективен как H264, который передает только отличия в кадрах и соответственно экономит трафик. Однако начать эксперименты я решил именного с него, взяв за основу MJPEG streamer raspimjpeg.

    Raspimjpeg и RPi_Cam_Web_Interface

    В интернете нашелся замечательный проект под названием RPi_Cam_Web_Interface, который очень хорошо работает с MJPEG и вот что он умеет:

    1. Просматривать, останавливать и перезагружать live превью с большим FPS;
    2. Изменять параметры камеры, такие как яркость, контраст в режиме реального времени;
    3. Записывать full hd видео в папку на SD карте с расширением mp4 без остановки превью (очень важный для нас момент, т.к. возможно в играх планируется делать таймбэки);
    4. Получать полноразмерные фото 5MP с сохранением на SD карту;
    5. Дает просматривать, скачивать и удалять сохраненные видео и фото файлы;
    6. Включать видеозапись по детекции движения;
    7. Выключать и перезагружать Pi из веб-интерфейса;
    8. Показывать метку времени в режиме превью и в полученных фото и видео.

    Инструкция по установке

    Шаг 1. Устанавливаем Raspbian на наш Raspberry Pi
    Шаг 2. Подключаем камеру к Raspberry Pi и включаем ее в raspi-config (http://www.raspberrypi.org/camera)
    Шаг 3. Делаем Update репозиториев:
    Код:
    sudo apt-get update 
    sudo apt-get dist-upgrade
    sudo rpi-update
    Шаг 4. Клонируем репозиторий с github и запускаем инсталлер:
    Код:
    git clone https://github.com/silvanmelchior/RPi_Cam_Web_Interface.git
    cd RPi_Cam_Web_Interfacechmod u+x 
    RPi_Cam_Web_Interface_Installer.sh
    Если хотите установить веб-интерфейс в /var/www, то надо отредактировать RPi_Cam_Web_Interface_Installer.sh согласно комментариям в файле и запустить инсталятор, в противном случае просто запускаем инсталятор:
    Код:
    ./RPi_Cam_Web_Interface_Installer.sh install
    Шаг 5. После окончания установки перезагружаем наш Raspberry Pi. Теперь можно открыть браузер на любом компьютере в локальной сети или смартфоне и просто ввести URL адрес нашего Raspberry Pi.
    Вики-страничка, с описанием многих функций, доступна по адресу http://elinux.org/RPi-Cam-Web-Interface

    Описание эксперимента

    Для начала была замерена задержка при передаче видеопотока в пределах локальной сети. Raspberry Pi передает видеосигнал по Wifi на роутер Zyxel Keenetic Giga, к этому же роутеру по Wifi подключены все компьютеры в локальной сети.

    Задержка составила примерно 180-200мс

    Новый рисунок (26).png


    Передача через интернет пока невозможна, ddns не работает в сети билайн GSM и Altel, т.к. доступ предоставляется через прокси-сервер. Эксперимент продолжится, когда будет нормальный интернет.
  3. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.554
    Симпатии:
    352
    Адрес:
    Алматы
    Motion-MMAL

    Собственно этот способ добавляет поддержку видео через MMAL API, библиотека специфична и поддерживается только на чипах Broadcom с OpenMAX.

    Установка

    Устанавливаем motion и дополнительные пакеты, чтобы все хорошо работало
    Код:
    sudo apt-get install motion
    sudo apt-get install libjpeg62 libjpeg62-dev libavformat-dev libavcodec-dev libavutil-dev libc6-dev zlib1g-dev libmysqlclient-dev libpq-dev
    Далее идем в директорию /tmp и качаем кастомную версию motion
    Код:
    cd /tmp
    wget https://www.dropbox.com/s/xdfcxm5hu71s97d/motion-mmal.tar.gz
    Собственно распаковываем архив и находим два файла motion-mmal.conf и motion. Бэкапим оригинальный бинарник и записываем новый:
    Код:
    tar zxvf motion-mmal.tar.gz
    sudo mv /usr/bin/motion /usr/bin/motion.orig
    sudo mv motion /usr/bin/motion
    sudo mv motion-mmalcam.conf /etc/motion.conf
    Эта версия motion ищет motion.conf в директории /etc, а не в /etc/motion
    Код:
    sudo chown root:root /usr/bin/motion
    Настройка

    Заходим в настройки motion, тут все более-менее стандартно
    Код:
    sudo nano /etc/motion.conf
    Запускаем демон автоматически:
    Код:
    daemon on
    Изменяем локацию для log, мне очень помог лог кстати, когда motion сразу не запустился из-за отсутствующей зависимости
    Код:
    logfile /tmp/motion.log
    Настройка разрешения изображения
    Код:
    width 1920
    height 1080
    Еще несколько настроек для просмотра с браузерного клиента по сети и настройка директории записи
    Код:
    stream_localhost off
    target_dir /tmp
    Сохраняемся и настраиваем демон для автоматического запуска
    Код:
    sudo nano /etc/default/motion
    start_motion_daemon=yes
    Перезагружаемся
    Для просмотра с камеры набираем в браузере http://<ip_address_of_pi>:8081

    Эксперимент показал, что этот способ дает просто огромные задержки при стримминге в локальной сети порядка 5-6 секунд. От дальнейших опытов с MMAL отказался.
  4. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.554
    Симпатии:
    352
    Адрес:
    Алматы
    Gstreamer1.0

    Как показали эксперименты самый удачный способ передачи видео, без лагов и с минимальной задержкой при передаче через интернет.

    В /etc/apt/source.list добавляем репозиторий
    deb http://vontaene.de/raspbian-updates/ . main

    потом получаем GPG ключ, без которого установить gstreamer со стороннего репозитория будет невозможно:
    Код:
    gpg --keyserver keyserver.ubuntu.com --recv KEY
    gpg --export --armor KEY | sudo apt-key add -
    где KEY - ключ, который вам выкинут, если вы попробуете установить sudo apt-get install gstreamer1.0
    После установки ключа нужно сделать sudo apt-get update и sudo apt-get install gstreamer1.0

    Инструкция для установки Gstreamer на MacOS

    Так получилось, что прием осуществлялся на MacOS, так что рассмотрим нюанся установки gstreamer именно на эту систему, у кого Linux то там вообще все просто.
    Самый простой способ установить Gstreamer на MacOS это использовать brew – менеджер пакетов аналог apt-get в Linux. Для установки в терминале вводим:

    Код:
    ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"
    Эта команда установит brew, далее обновляем его:
    Код:
    brew update
    Далее качаем Gstreamer:
    Код:
    brew install gstreamer gst-libav gst-plugins-ugly gst-plugins-base gst-plugins-bad gst-plugins-good
    Для запуска передачи видео на RaspberryPI вводим команду:
    Код:
    raspivid -t 999999 -h 720 -w 1080 -fps 25 -hf -b 2000000 -o - | gst-launch-1.0 -v fdsrc ! h264parse !  rtph264pay config-interval=1 pt=96 ! gdppay ! tcpserversink host=YOUR-PI-IP-ADDRESS port=5000
    На приемном ПК вводим:
    Код:
     gst-launch-1.0 -v tcpclientsrc host=YOUR-PI-IP-ADDRESS port=5000  ! gdpdepay !  rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false
    Валерий нравится это.
  5. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.554
    Симпатии:
    352
    Адрес:
    Алматы
    В общем, на этом мои опыты закончились, я рассмотрел почти все возможные способы передачи видео в интернет от raspberry pi. Самым удачным оказался способ с использованием gstreamer1.0
  6. Чапаев

    Чапаев В доску свой

    Сообщения:
    188
    Симпатии:
    20
    Род занятий:
    Охранные системы безопасности
    Адрес:
    Астана
    Во сколько обошелся Raspberry Pi и камера, если не секрет?
  7. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.554
    Симпатии:
    352
    Адрес:
    Алматы
    Raspberry Pi 41$, камера - 25$
  8. Чапаев

    Чапаев В доску свой

    Сообщения:
    188
    Симпатии:
    20
    Род занятий:
    Охранные системы безопасности
    Адрес:
    Астана
    Писали в статьях что Raspberry Pi можно за 25 долл купить, а Raspberry Pi 2 за 35 долл. Близко таких цен нет. Не подскажете где заказать можно по приемлемой цене?
  9. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.554
    Симпатии:
    352
    Адрес:
    Алматы
    Я отсюда одноплатники заказываю. И я бы не советовал raspberry pi, разве что так поиграться и забросить, лучше брать cubieboard, больше возможностей у него, хорошо документированный SoC.
  10. Чапаев

    Чапаев В доску свой

    Сообщения:
    188
    Симпатии:
    20
    Род занятий:
    Охранные системы безопасности
    Адрес:
    Астана
    Где-то читал что у cubieboard GPIO нет, можно подключить GPIO через USB Host.

    Для Raspberry Pi много проектов есть. И не знаешь теперь что пригодиться больше, Raspberry Pi 2 или cubieboard.
  11. radioengineer

    radioengineer Администратор Команда форума

    Сообщения:
    3.554
    Симпатии:
    352
    Адрес:
    Алматы
    У #cubieboard #gpio гораздо больше, чем у #raspberrypi На распберри проектов готовых больше, но они все так для игр, не более того.
  12. Чапаев

    Чапаев В доску свой

    Сообщения:
    188
    Симпатии:
    20
    Род занятий:
    Охранные системы безопасности
    Адрес:
    Астана
    Показывали по новостям, где-то месяц назад, в KZ семейная пара (програмисты) сделали игровую приставку для детей, игра проходит в активном двигательном режиме, есть педальки, которые дети нажимают ногами как бы танцуя, повторяя действия за героями игры, внешне красиво смориться, детям интересно. Наверно на Raspberry сделали они.

Поделиться этой страницей