Создание OSD на базе одноплаточника с linux

xmailer

Добрый день!
В настоящее время собираю информацию для разработки своей OSD на базе linux. Основной вопрос: микширование video потока с текстовыми и графическими данными, причем это должно происходить на борту. Конечный результат - реализации следующей схемы: беспилотник с APM + одноплаточник с камерой + съем video stream данных + video overlay данных с АРМ = раздача микшированного видео потока по wifi.

Ранее я пользовался ffmpeg и его плагинами для создания OSD подобного функционала - забирал поток с ip камеры + drawtext/draw*** + раздача rtp потока. Но там сразу возникла проблема программной реализации плагинов draw***, которую так и не решили с ffmpeg разработчиками и все тогда было заброшено.

После знакомства с virt2real узнал больше gstreamer, спасибо виртурильщикам за свои демо и wiki на сайте. Ранее gstreamer не рассматривал, т.к. попал сразу на негативные отзывы о gstreamer. После virt2real и более детального теста gstreamer пришел к выводу:

  1. gstreamer достаточно глючная не стабильно работающая штука
  2. штатными good плагины gstreamer как мне кажется не собрать полноценной OSD
  3. стоит ли пытаться реализовать свой OSD плагин по gstreamer.freedesktop.org/data/doc/…/html/
  4. чем примерно пользовались парни для разработки OSD chiefpilot.ru
  5. какие еще возможны варианты video overlay в linux

Сейчас все тестирую в ubuntu, которая гнездится в vmware workstation. Ubuntu выбран по причине того, что у него из репозитария идет свежая версия gstreamer и нормально собирается gst-template.

Буду признателен за любую информацию по моим вопросам.
Спасибо.

Tahorg

Подобная плата избыточна. Достаточно мощности любого STM32F0, хотя на F4, конечно, проще и не сильно дороже. Главная проблема не ГСтример, а сам линукс. Если что - он потребует вермени на перезагрузку. А микроконтроллер готов к бою сразу.

xmailer
Tahorg:

Подобная плата избыточна. Достаточно мощности любого STM32F0, хотя на F4, конечно, проще и не сильно дороже. Главная проблема не ГСтример, а сам линукс. Если что - он потребует вермени на перезагрузку. А микроконтроллер готов к бою сразу.

Во-первых - я полностью с Вами согласен, просто не представляю как на STM32 реализовать: беспилотник с APM и камерой + STM32 + съем video stream данных + video overlay данных с АРМ = раздача микшированного видео потока по wifi.
Во-вторых - все эти перезагрузки, вообще глючность и медленность оси, на мой взгляд можно порешать выстроив соответствующую архитектуру работы. Да и на данном этапе для меня это не особо значимо.
В-третьих - немного уточню обсуждаемую тему: создание дублирующей OSD на базе одноплаточника с linux, некий subOSD на борту. Просто сам по себе linux дает разработчику очень большие возможности, которые более отлаженные, чем будет мой код под STM32. Для примера приведу использование opencv на борту, под stm32 КомпьютерВизион я не видел, придется городить свой огород. Задумка состоит не просто в создание OSD

Tahorg

Ок, но тогда вопрос не в gstreamer - Вам надо ДО него влиниться в поток, отдаваемый raspivid.

xmailer
Tahorg:

Ок, но тогда вопрос не в gstreamer - Вам надо ДО него влиниться в поток, отдаваемый raspivid.

Я вижу все следующим образом (меня получилось следующая инструкция с штатным good plugin):
gst-launch-1.0 uridecodebin uri=http://192.168.0.15/mjpg/video.mjpg ! cairotextoverlay text=“Привет Мурманск” xpad=500 ypad=500 ! ffmpegcolorspace ! jpegenc ! multipartmux ! tcpserversink port=5000
Расклад:

  1. забираем video поток gst-launch-1.0 uridecodebin uri=http://192.168.0.15/mjpg/video.mjpg
  2. используем плагин textoverlay от pango накладываем текст в позиции x=500,y=500 cairotextoverlay text=“Привет Мурманск” xpad=500 ypad=500
  3. выводим в tcp сокет порт 5000, tcpserversink port=5000
    ----резюме--------
    запустим vlc и откроем видео по url tcp://ip-linux:5000 и увидим видео с ip камеры 192.168.0.15 с текстом Привет Мурманск в позиции 500,500
    ----продолжение----
  4. качаем gst-template
  5. кодим plugin для gstreamer с нанесением osd информации
  6. ставим плагин
    -----используем новый плагин-------
    gst-launch-1.0 uridecodebin uri=http://192.168.0.15/mjpg/video.mjpg ! новый плагин для gstreamer ! tcpserversink port=5000
    -----результат-------
    запустим vlc и откроем видео по url tcp://ip-linux:5000 и увидим видео с ip камеры 192.168.0.15 с osd текстом согласно логике работы плагина
Tahorg

имея полный линукс и мощный проц выводить все текстом … к чему тогда все это? Надо графику, горизонт, спидбар и альтбар, иконки сгнала и направления … перехватывать поток, накладывать графику и т.д.

xmailer
Tahorg:

имея полный линукс и мощный проц выводить все текстом … к чему тогда все это? Надо графику, горизонт, спидбар и альтбар, иконки сгнала и направления … перехватывать поток, накладывать графику и т.д.

конечно так и планируется, пока просто алгоритм и инструменты пытаюсь найти. Такой работой ранее не занимался, познакомился с virt2real и посмотрел chiefpilot.ru вот и понеслось…

schs
xmailer:

gst-launch-1.0 uridecodebin uri=http://192.168.0.15/mjpg/video.mjpg

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

xmailer:

познакомился с virt2real

Может у них спросить код, хотя бы пример, ведь у них уже реализовано наложение OSD.