БПЛА. Просмотр видео онлайн на сторонних устройствах. 3 способа

БПЛА

Описание запроса:
Во время полёта диспетчер БПЛА осматривает видео с экрана своего пульта, однако иногда есть потребность вывести картинку на дополнительные устройства: ноутбук, телефон или планшет. Это ведь совершенно не лишняя помощь при поиске, кроме того эти люди не дышат в спину пилота, и при этом осматривают материал, почему нет?

Мы имеем:
— БПЛА — DJI Mavic Enterprise Zoom;
— Пульт — Dji smart controller;

Задача: обеспечить трансляцию картинки минимум в 720p (1280×720), на экраны сторонних устройств с минимальной задержкой.

Решение № 1

Самое простое решение, пульт обладает выходом HDMI. То есть берем обычный кабель HDMI и подключаем к монитору, ЖК-панели или телевизору или проектору отличное качество картинки, высокое разрешение, никаких задержек.

Минусами является:
— Наличие кабеля для подключения
, диспетчеру БПЛА может быть не удобно, если вы его посадите на такую «цепь».
— Стоимость кабеля. Стоимость длинного и хорошего HDMI кабеля может достигать больших денег, это надо учитывать.
— Необходимость возить с собой и запитывать монитор (ЖК-панель, телевизор, проектор). Если полет не в квартире))), а на открытом воздухе, с собой нужно дополнительно привести описанное оборудование, и продумать обеспечение питания для него.

Внимание!
Технология HDMI работает в одном направлении, то есть, HDMI на пульте это выход (OUT), а на мониторе вход (IN). На ноутбуках, планшетах, стационарных компьютерах разъем HDMI тоже (OUT), то есть вы не сможете транслировать картинку на ноутбук, к примеру, если просто подключите его HDMI кабелем к пульту.

Решение № 2

Можно поставить переходник из HDMI в USB и принимать видеосигнал, на ноутбуке, планшете и тд. Данное решение описано в сети Интернет.

Минусами является: — Стоимость оборудования. Очень разная стоимость этих переходников, иногда она может доходить и даже превышать стоимость самого пульта БПЛА, есть китайские аналоги, но качество и долговечность их не известна.

Решение №3

И вот на этом решении я хотел бы остановиться по подробнее. Дело в том, что DJI Pilot может отдавать RTMP поток (Real Time Messaging Protocol). Этот протокол позволяет передавать звук и видео с БПЛА в реальном времени на стримминговые сервера. Для этого надо направить видео-аудио cигнал по ссылке, на RTMP сервер, с индивидуальным ключом. К примеру, в VK, YouTube и тд. Ну что же, давайте запилим свой сервер.

Схема работы стриминга потока RTMP для БПЛА

На схеме показано: видео в режиме онлайн с БПЛА идет на пульт DJI smart controller. Пульт, в свою очередь, отправляет видео и звук на сервер RTMP по созданной сети, после этого, сервер отдает видео на клиентские устройства, с которых видео будет просматриваться. Кроме того, сервер может одновременно выступать и клиентским устройством тоже.

Решение я использовал на базе web-сервера NGINX и модуля nginx-rtmp. Ниже ссылки на страницы с мануалами, как реализовать стримминг, на их базе написан данный материал. В условиях улицы потребуется устройство, которое обеспечит доступ для всех участников сети по Wi-Fi. Причем требования к полосе пропускания немаленькие.

Путем экспериментов пришли к выводу, что Wi-Fi (802.11b/g) мало для реализации этого решения. Требуется по меньшей мере Wi-Fi (IEEE 802.11n). Так же, станция на которой будет разворачиваться сервер, должна быть производительная (процессор с частотой 2,5 Ггц, RAM 8 G и больше.)

Для теста мы использовали

— Ноутбук HP 250 G6 (Os Windows & Linux);
— Router Wi-Fi b,n,ac. (телефон Xiaomi Redmi Note 7)

Реализовать сервер на базе операционной системы Windows для БПЛА

1. Создаем папку в которой будет находиться наш сервер

К примеру С:\Nginx

2. Скачиваем необходимое ПО

https://github.com/illuspas/nginx-rtmp-win32 — это сервер NGINX в который уже встроен модуль RTMP

https://github.com/arut/nginx-rtmp-module/archive/master.zip -‘это тема для отслеживания потока через WEB морду

3. Разархивируем  

nginx-rtmp-win32-master.zip в папку C:\Nginx\nginx-rtmp-win32-master

nginx-rtmp-module-master.zip в папку C:\Nginx\nginx-rtmp-win32-master\www2

4. Настраиваем Nginx

для этого откроем C:\Nginx\nginx-rtmp-win32-master\conf\nginx.conf

Отставить паниковать!
Давайте, разберемся!

worker_processes  1;

error_log  logs/error.log debug;

events {
    worker_connections  1024;
}

rtmp {
    server {
        listen 1935;

        application live {
            live on;
        }
        
        application hls {
            live on;
            hls on;  
            hls_path temp/hls;  
            hls_fragment 8s;  
        }
    }
}

http {
    server {
        listen      8080;
        
        location / {
            root www;
        }
        
        location /stat {
            rtmp_stat all;
            rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl {
            root www;
        }
        
        location /hls {  
           #server hls fragments  
            types{  
                application/vnd.apple.mpegurl m3u8;  
                video/mp2t ts;  
            }  
            alias temp/hls;  
            expires -1;  
        }  

    }
}

Вот секция, которая для нас ключевая

rtmp {
    server {
        listen 1935;

        application live {
            live on;
        }
        
        application hls {
            live on;
            hls on;  
            hls_path temp/hls;  
            hls_fragment 8s;  
        }
    }
}

В ней мы описываем rtmp, указываем, что хотим, что бы сервер ждал поток на порту 1935. А приложение мы назовем live (application live), (можем назвать как угодно). И указываем флагом, что приложение включено (live on;). Можно тут добавить еще настройки, но для теста нам вполне этого достаточно.

5. Запускаем сервер

C:\Nginx\nginx-rtmp-win32-master\nginx.exe

6.Направляем поток с пульта на сервер

Заходим в меню DJI Pilot — жмем на три точки, переходим в раздел «live stream». Там выбираем «RTMP Custom»

БПЛА. Просмотр видео онлайн на сторонних устройствах. 3 способа

У вас появиться предложение ввести адрес сервера. Вводим в формате rtmp://x.x.x.x/live/dron1
где. x.x.x.x — IP-адрес сервера

Если всё настроено верно, то окошко закроется, а в верхнем левом углу пульта появиться значок, который обозначает, что связь с сервером есть и поток летит на него.

7.Настраиваем клиента

Тут же на сервере (или на устройстве из этой же сети) мы открываем, к примеру, VLC player, идем в «Медиа» — «Открыть URL»

БПЛА. Просмотр видео онлайн на сторонних устройствах. 3 способа

И на вкладке сеть вводим адрес rtmp://x.x.x.x/live/dron1

БПЛА. Просмотр видео онлайн на сторонних устройствах. 3 способа

Если все вы сделали правильно, то в результате вы должны увидеть изображение с камеры БПЛА.

Реализовать сервер на базе операционной системы Linux для БПЛА

На данный момент прихожу к выводу, что для сервера RTSP Windows 10 не лучшее решение, хотя и худо — бедно работающее. Для дистрибутивов Linux я ограничений не встречал. В Интернет вы легко найдете сборку NGINX-RTSP сервера для Linux. Все работает. Я же взял в качестве дистрибутива AstraLinux версии Орёл. Это операционная система в основе, которой лежит Debian. Все описанные действия подходят для любой операционной системы Linux.

1. Важно!

Если перед тем, как приступить к данной инструкции вы уже устанавливали NGINX при помощи утилиты «apt» («apt-get»). Придется все удалить

sudo apt-get remove nginx

или

sudo apt-get purge nginx

2. Установка необходимых пакетов для Nginx

sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev

3. Скачиваем Nginx и Nginx-RTMP

Последнюю версию Nginx можно проверить по ссылке http://nginx.org/download/ . На момент написания последняя версия nginx-1.18.0.tar.gz

Создадим папку, где будет находиться сервер:

mkdir ~/working

Переходим в нее:

cd ~/working

Скачиваем пакеты:

wget http://nginx.org/download/nginx-1.18.0.tar.gz
wget https://github.com/arut/nginx-rtmp-module/archive/master.tar.gz

Распаковываем:

tar -zxvf nginx-1.18.0.tar.gz
tar -zxvf master.tar.gz

4. Установка Nginx

Переходим в папку с разаархивированным Nginx

cd nginx-1.18.0.tar.gz

Для добавления модуля nginx-rtmp к nginx нужно указать его в опции —add-module при конфигурации nginx, как и любой другой модуль.

 ./configure --add-module=/path/to/nginx-rtmp-module-master

Компилируем и устанавливаем:

make
sudo make install

5. Устанавливаем скрипты инициализации Nginx 

sudo wget https://raw.github.com/JasonGiedymin/nginx-init-ubuntu/master/nginx -O /etc/init.d/nginx
sudo chmod +x /etc/init.d/nginx
sudo update-rc.d nginx defaults

*последняя команда добавляет nginx в автозапуск

6. Теперь можно попробовать запустить Nginx  и проверить что он хотя бы запускается

sudo service nginx start
sudo service nginx stop

Если при запуске программа ругается на то, что порт 80 уже занят, то скорее всего уже запущенна какая-то версия web-сервера. Надо найти и выключить.

7. Настройка Nginx  

Редактируем файл конфигурации

sudo nano /usr/local/nginx/conf/nginx.conf

В корень конфига добавляем:

rtmp {
    server {
        listen 1935;
        application live{
            live on;
        }
    }
}

Стартуем Nginx

sudo service nginx start

или

sudo  /usr/local/nginx/sbin/nginx

8. Тест Nginx

Мы можем отправить поток видео и аудио на сервер используя все тот же протокол RTMP для публикации. А наши клиенты смогут трансляцию смотреть. Для вещания серверных потоков и для тестирования часто используют ffmpeg (и ffplay). Начнем вещание тестового файла test.mp4 следующей командой:

$  ffmpeg -re -i /var/videos/test.mp4 -c copy -f flv rtmp://localhost/live/mystream

Проигрываем передаваемое видео

 ffplay rtmp://localhost/myapp/mystream

Настройку плеера VLC можно взять из описания Windows сервера.

Ниже приведено видео из Национальной библиотеки им. Н. Э. Баумана Тут наглядно показан процесс инсталляции и настройки сервера на дистрибутив Ubuntu

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

Если вы хотите обсудить эту тему, добро пожаловать на форум.

Полезные ссылки

О протоколе RTMP https://en.wikipedia.org/wiki/Real-Time_Messaging_Protocol

Как стримить в  ВК https://vk.com/@authors-create-stream

Описание разворачивания и настройки сервера rtmp на базе Windows
http://chromaggus.ru/topic/4258-рестрим-на-2-и-более-сервиса/
https://goodgame.ru/topic/74992/

ПО для реализации RTMP сервера на Windows
https://github.com/arut/nginx-rtmp-module/archive/master.zip
https://github.com/illuspas/nginx-rtmp-win32

Описание разворачивания и настройки сервера Linux
https://goodgame.ru/topic/75146
https://ru.bmstu.wiki/Nginx-rtmp-module
https://forum.ustim.ru/viewtopic.php?t=113
https://itmultimedia.ru/onlajn-translyacii-s-pomoshhyu-modulya-ngnix-rtmp-module/
https://habr.com/ru/post/162237/
https://habr.com/ru/post/174089/

ПО для реализации RTMP сервера на Linux

http://nginx.org/download/nginx-1.18.0.tar.gz
https://github.com/arut/nginx-rtmp-module/archive/master.tar.gz