xmailer писал(а):realizator писал(а):По нашему опыту родное OSD очень тормозит работу виртурилки. Поэтому мы транслируем телеметрию отдельным потоком и накладываем ее уже на клиентском устройстве. С этим отлично справляется и комп, и телефон (Андроид).
Спасибо за ответ.
Если не сложно пару уточнений, если конечно это не секрет:
1. т.е. GStreamer для OSD не годится,
пробовали Вы для этих целей ffmpeg, который также поддерживает систему плагинов и очень похож по функциона на gstreamer?~~~> под гстример у нас есть бинарники от производителя процессора, которые используют DSP для очень быстрого сжатия видео, поэтому gstreamer
2. правильно ли я понял Ваш алгоритм работы:
на стороне устройства:-gstreamer организация трансляции "чистого" (без данных телеметрии) видео, цепочка ниже взята с
wiki.virt2real.ru Трансляция в HD.
Вопрос - почему в udpsink, а не tcpsink? Понятно что udp быстрее в разы, но как часто у Ваc рушится (появляются артефакты) видео?~~~> TCP это не риалтайм, совсем даже не рядом. Если забыть о видео, то еще бывают сюрпризы когда есть лаг по связи, а потом на борт сразу прилетает пачка всех команд за время лага - и ему сносит башню. Так что только UDP
Рассыпания картинки конечно бывают, но у нас оптимизацию по разбиению пакетов идет и селективный отбор на приемной стороне - если пакет битый, мы не даем портиться картинке, а оставляем последний стабильный вариант. Там очень много "под капотом" сделано для стабильности картинки.
- Код: Выделить всё
HOST_ADDR=127.0.0.1
PORT=3000
gst-launch -e v4l2src always-copy=FALSE input-src=composite chain-ipipe=true ! video/x-raw-yuv,format=\(fourcc\)NV12, width=1280, height=720, framerate=\(fraction\)23/1 ! queue ! dmaiaccel ! dmaienc_h264 encodingpreset=2 ratecontrol=2 intraframeinterval=23 idrinterval=46 targetbitrate=3000000 ! rtph264pay ! udpsink port=$PORT host=$HOST_ADDR sync=false enable-last-buffer=false &
-организация сокета данных телеметрии, например netcat-ом, т.е. например tx телеметрии автопилота к rx gpio одноплаточника. затем делаем linux сервис
- Код: Выделить всё
netcat 127.0.0.1 3001< /dev/ttyX
.
Каким пакетом пользуетесь для организации сокета телеметрии?~~~> У нас свой софт забирает на борту и свой софт на земле принимает и видео и телеметрию. Телеметрию разбираем сами для ОСД, плюс транслируем в приложения, которые умеют телеметрию по UDP принимать. Эмуляцией ком-портов не занимаемся.
на стороне клиента (компа или телефон) - коннектимся к видео и телеметрии сокетам одноплаточника делаем средствами скажем opencv (благо есть порты под разные оси) законченное клиентское OSD.
Какими средствами забираете видео и миксите с текстом и графикой телеметрии?