Беспроводная передача видео в full HD

тигромух
schs:
  1. купить обычную ip камеру + wifi роутер + усилитель.

HD IP-камера у нас стоит 4-6 т.р. Не факт, что удастся с первого раза купить подходящую под наши цели (латентность, протокол и т.п.). Исследований этого вопроса в интернете я не нашел. Очевидно, желающих тратить столько денег просто нет 😃

В итоге я купил на ибее распберри с камерой. Получилась та же IP-камера, только в более колхозном виде и за ~3т.р. 😃
По сравнению с виртурилкой есть несколько проблем, например, нельзя нарисовать ОСД (возможно, верменно), вряд-ли когда-нибудь будет работать нативный АПМ, нет HDMI входа и т.п. Но чтоб просто попробовать HD FPV - потянет 😃

schs
Tahorg:

что-то из каталога UBIQUITI

Как вариант. Пробовали? Какую из их камер можете посоветовать?

тигромух:

Не факт, что удастся с первого раза купить подходящую под наши цели (латентность, протокол и т.п.)

Вот и я опасаюсь взять совсем неподходящее. Пара простых с VGA разрешением есть, есть хорошая AXIS, но у неё цена слишком уж высокая.

тигромух:

В итоге я купил на ибее распберри с камерой. Получилась та же IP-камера, только в более колхозном виде и за ~3т.р.

Посмотрю, спасибо.

schs

Взял у знакомого raspberry, без модуля камеры, подключил Logitech C310. Качество нормальное, но динамическое изображение мажет крайне сильно, не для полётов.
Придёт с родной камерой, попробую ещё раз. Поток в MJPEG ~10Mbit

=VinT=
тигромух:

HD IP-камера у нас стоит 4-6 т.р. Не факт, что удастся с первого раза купить подходящую под наши цели (латентность, протокол и т.п.). Исследований этого вопроса в интернете я не нашел. Очевидно, желающих тратить столько денег просто нет 😃

В итоге я купил на ибее распберри с камерой. Получилась та же IP-камера, только в более колхозном виде и за ~3т.р. 😃
По сравнению с виртурилкой есть несколько проблем, например, нельзя нарисовать ОСД (возможно, верменно), вряд-ли когда-нибудь будет работать нативный АПМ, нет HDMI входа и т.п. Но чтоб просто попробовать HD FPV - потянет 😃

Я проводил мини тестирование вариантов передачи видео потока:

  1. Rasbery Pi и usb камера в MJPEG

Плюсы

1.Минимальная задержка(<0,1 сек) по сравнению с h264 (картинка сразу отсылается после передаче с сенсора, в h264 сначала копиться последовательность фреймов)
2. В темноте передаёт видео лучше чем rasbery pi cam(тут надо потестировать и у последней вырезается ИК фильтр что позволяет ей снимать в темноте)

Минусы

  1. Высока плотность потока (к примеру 640*480*30 кадров это около 15 мбит/c). Т.е. это сразу делает невозможным слать такой поток через интернет с минимальной задержкой, а если делать передачу через wifi точку это значит её высокую мощность. Надо понимать что при такой плотности потока по wifi при минимальном удалении от спота будут сразу теряться картинки из потока.

  2. Низкое качество cmos сенсора. Дешёвые usb камеры имеют низкое разрешение (0,3-1 мегапикселя)и фиксирование фокусное расстояние. Кроме того у многих разрешение выше 640x480 получается увлечением картинки.

  3. Большие задержки на высоких разрешениях. Тут всё зависит от цены камеры. Дешёвые камеры снимают 720p c частотой 5 кадров в секунду. Дорогие стоит от 3к рублей.

  4. Маленький угол обзора.

  5. Rasbery Pi и usb камера в h264

Слаборабочий вариант т.к., для минимальной задержки нужно максимальное число кадров и высокое разрешения картинки (первое в приоритете, у меня получался минимум задержки на 720p 30 кадрах.) Большинство usb камер не умеют делать поток HD с частотой 30 кадров. Кроме того простенькие usb камеры содержат ограниченный зашитый набор настроек картинки (баланс белого, яркость контрастность и пр.). Из-за этого камеру нельзя настроить на кодирование динамического потока(когда модель движется) и получаются артефакты в потоке h264

  1. Rasbery Pi и родная камера в h264
    Вроде пока самый рабочий вариант

Плюсы

  1. Относительно небольшая задержка (0,2-0,3 сек - подробнее см rcopen.com/blogs/195763/18677)
  2. Автонастройка качества картинки и освещения (а также множество опций типа antishake)
  3. Возможность снимать картинку в FULLHD на 30 кадрах

Минусы

  1. Маленький угол (<60 град.)
  2. Плохо работает в условиях слабой освещённости. Качество динамической картинки также сильно зависит от освещённости. Если света меньше среднего - на картинке будут артефакты при резких движениях.

Ещё нюансы которые могут быть полезны:

  1. Минимальная задержка при передаче в h264 через gstreamer достигается при опции tune=zerolatency. К сожалению реализация модуля камеры omxh264dec(для rasbery pi cam) не поддерживает этот флаг (могла бы быть задержка на уровне 0,15 сек вместо 0,25). Возможно у ребят с виртурилкой эта проблема решена.(будут лишние деньги - куплю их девайс).

  2. У родной rasbery pi cam никакая оптика и угол обзора около 60 град. Я покупал wide линзу от iphone (вот такую ) она расширяет до 90 градусов(что тоже маловато, плюс к тому с квадрика отваливается). Сейчас я купил у друзей китайцев модуль с крепежём для линз под M12x0.5 и набором линз до 180 град. Фото ниже. Как будут результаты отпишусь в блоге.

тигромух
=VinT=:
  1. Маленький угол (<60 град.)

У меня на FullHD угол маленький, но если переключить в 720p получается вполне адекватный. Можно летать.
Но у меня китайская камера с M12.

=VinT=:
  1. Плохо работает в условиях слабой освещённости. Качество динамической картинки также сильно зависит от освещённости. Если света меньше среднего - на картинке будут артефакты при резких движениях.

Это скорее проблемы h264 и низкого битрейта.

=VinT=:
  1. Минимальная задержка при передаче в h264 через gstreamer достигается при опции tune=zerolatency. К сожалению реализация модуля камеры omxh264dec(для rasbery pi cam) не поддерживает этот флаг (могла бы быть задержка на уровне 0,15 сек вместо 0,25). Возможно у ребят с виртурилкой эта проблема решена.(будут лишние деньги - куплю их девайс).

Подождите, вы тащите с камеры поток в H.264 и декодируете его? Или для чего вам omxh264dec?
Я пытался брать сырой поток с камеры и кодировать через omxh264enc, но получил адские тормоза. Скорее всего из-за сырого драйвера v4l. Или руки у меня не оттуда 😃
Пока что я остановился на общепринятом варианте скармливания потока с raspivid в gstreamer через fdsrc. Задержка ~0.2 (через wifi). Но с идеей наложить ОСД пришлось расстаться 😦

yurik999

расскажите какие девайсы надо прикупить чтоб через вашу плату и 3g например транслировать видео HD (или более высокого разрешения чем обычные аналоговые) . Ну и по деньгам тож.

=VinT=
тигромух:

У меня на FullHD угол маленький, но если переключить в 720p получается вполне адекватный. Можно летать.
Но у меня китайская камера с M12.

То что указано выше справедливо для raspberry pi cam и usb камер : Creative Live! Cam Sync HD и Logitech Webcam C170. Наиболее критична проблема с углом у raspberry pi cam без оптики.

тигромух:

Это скорее проблемы h264 и низкого битрейта.

Согласен. h264 не очень подходит для динамики.

тигромух:

Подождите, вы тащите с камеры поток в H.264 и декодируете его? Или для чего вам omxh264dec?
Я пытался брать сырой поток с камеры и кодировать через omxh264enc, но получил адские тормоза. Скорее всего из-за сырого драйвера v4l. Или руки у меня не оттуда 😃
Пока что я остановился на общепринятом варианте скармливания потока с raspivid в gstreamer через fdsrc. Задержка ~0.2 (через wifi). Но с идеей наложить ОСД пришлось расстаться 😦

У меня первая версия передачи работала с цепочкой omxh264enc. Нагрузка на процессор малины была в среднем 10%.(для raspberry pi cam). Задержки о которых Вы пишите выше возможны:

Для raspberry pi cam

  1. Из-за старой прошивки raspberry (нуженrpi-update)
  2. Старой версии gstreamer (у меня стоит 1.0.7)

Для USB камеры

  1. Из-за несоотвествия формата изображений - большинство usb камер нативно даёт картинку в jpeg. При перекодировании как раз и подвивает процессов (т.е. jpeg --> raw --> h264).

Сейчас я тоже делаю цепочку на raspivid. Но тут надо понимать что в него зашит кусок кода от кодека omxh264enc. Также я писал о опции tune=zerolatecy. Это команда применяется по всей цепочке gstreamer. В случае использования утилиты raspivid с перенаправлением потока она не оказывает на него никакого воздействия.

yurik999:

расскажите какие девайсы надо прикупить чтоб через вашу плату и 3g например транслировать видео HD (или более высокого разрешения чем обычные аналоговые) . Ну и по деньгам тож.

Евгений - посмотрите в моём блоге, я все шаги описываю.
Сейчас у меня сам проект в промежуточном состоянии(не получается облетать квадрик, по программной части всё работает).
По 3g ещё не делал этап.

Грубо расходы на блок видеопередачи в HD 3400 р:
rasbery pi A = 1 000
rasbery pi cam = 1 000
usb hub =200 р
ubec 5A =200 р
3g модем мегафон = 1000

Если нужно ещё управлять через сеть то:
APM 2.5 = 2500
Андроид планшет = мин 7000

РД00
=VinT=:

посмотрите в моём блоге, я все шаги описываю

Не совсем понял, как сделано соединение APM - USB Hub - WiFi/модем. MAVLINK идет через Raspberry ?

=VinT=
РД00:

Не совсем понял, как сделано соединение APM - USB Hub - WiFi/модем. MAVLINK идет через Raspberry ?

Да.
На raspberry крутиться демон, который открывает USB порт и читает/пишет все mavlink сообщения. С другой стороны он эти данные читает/принимает через UDP порт.

тигромух
=VinT=:

У меня первая версия передачи работала с цепочкой omxh264enc. Нагрузка на процессор малины была в среднем 10%.(для raspberry pi cam). Задержки о которых Вы пишите выше возможны:
Для raspberry pi cam

  1. Из-за старой прошивки raspberry (нуженrpi-update)
  2. Старой версии gstreamer (у меня стоит 1.0.7)

Вы, наверное, использовали uv4l? Мне идея с драйвером в юзерлэнде не понравилась и я экспериментировал с ядерным модулем.
Прошивка у меня самая новая, т.к. без последнего фикса драйвера, gstreamer вообще не отрывал v4l2src. У него там вялотекущая бага с перечислением доступных разрешений. В последней версии драйвера добавили костыль для обхода.
Gstreamer тоже ставил всяких версий. Даже из сорцов собирал. Малина ужасно тормозная, собирался он часов 12 😃
Самое смешное, что в первых сборках модуля все работало правильно и кто-то на форуме даже рапортовал о достигнутой латентности в 150мс. А сейчас все сломали и где искать концы непонятно…
С пайпом от raspivid вполне можно было бы жить, но все-же хочется что-нибудь порисовать на экране 😦

=VinT=:

Также я писал о опции tune=zerolatecy.

Это фишка кодека x264. Для малины не актуально. Вообще, на это тему хорошо написано тут.
И это сходится с моими экспериментами: задержка от камеры до оверлея, т.е. до энкодера составляет около 100мс.
Если хотите, могу фотку поискать 😃

1 month later
Chester_kz

Позволю себе немного оживить тему.
Сделал передачe HD(720) видео через LTE.
На малине в принципе все как у всех gsteamer отдает черeз UDP.
> gst-launch-1.0 rpicamsrc bitrate=4500000 vflip=true hflip=true preview=false ! video/x-h264, width=1280, height=720, framerate=25/1, profile=high ! h264parse ! rtph264pay config-interval=1 pt=96 mtu=1300 ! udpsink host=<серый ip телефона> port=5000 sync=false
Далее usb свисток в моем случае это ZTE MF823.
На приеме работал андроид телефон в той же сети оператора (4G). Софтину на телефон делал по примерам использовал последний SDK. если кому надо будет вышлю исходники или apk.
наш горе оператор выдает серые IP потому приходиться мучатся с конфигами. Но работает. Задержка где то такая-же как и по вайфай. Может немного больше. Не знаю почему но по вайфай я нередко видел аретефакты что говорит о том что пакеты дропаются. Здесь такого не видел.

тигромух
Chester_kz:

На малине в принципе все как у всех gsteamer отдает черeз UDP.

Через ядерный v4l не пробовали? Задержка, по идее, должна быть поменьше.
Сам пробовал, но погряз в багах gstreamer’а и забросил это дело…
А через raspivid меньше ~200 никак не получается 😦

Chester_kz
тигромух:

Через ядерный v4l не пробовали? Задержка, по идее, должна быть поменьше.

Я использовал плагин к стримеру отсюда github.com/thaytan/gst-rpicamsrc с ним вроде как задержка чуть меньше. Хотя возможно показалось. Но объективно могу сказать что с этим плагином нагрузка на основной проц гораздо меньше чем при использовании raspivid.
Не подскажите где почитать про “ядерный v4l”?

schs
Chester_kz:

если кому надо будет вышлю исходники или apk.

Можно .apk?

Chester_kz
schs:

Можно .apk?

Положил в дропбокс
В меню программы есть только Play и Pause. Видео идет в полный экран. Экран не гаснет. В принципе это стандартный туториал от г-стримера тока чуть чуть подпиленный.

schs
Chester_kz:

Положил в дропбокс

Добрался попробовать. У меня на устанавливается. Android 4.1.1kernel 3.0.8+

Chester_kz
schs:

Добрался попробовать. У меня на устанавливается. Android 4.1.1kernel 3.0.8+

Похоже я собирал под кит-кат (=>4.4) как разгребусь с работой пересоберу для версий ниже.
Кстати нашел любопытный пост на дронсах.
diydrones.com/profiles/blog/show?id=705844%3ABlogP…
В двух словах человек утверждает что можно добиться уменьшения задержки за счет увеличения fps.
Попробовал у себя разницу в latency визуально что-то не заметил. Хотя увеличение fps заметно стало - смотреть приятно.

тигромух
Chester_kz:

В двух словах человек утверждает что можно добиться уменьшения задержки за счет увеличения fps.
Попробовал у себя разницу в latency визуально что-то не заметил.

Интересно, надо потестировать…
А вы пробовали через raspivid/fdsrc или rpicamsrc?

Chester_kz
schs:

Добрался попробовать. У меня на устанавливается. Android 4.1.1kernel 3.0.8+

пересобрал под 4.0 ссылка