Russian Qt Forum

Qt => Работа с сетью => Тема начата: NoIdea от Октябрь 16, 2018, 17:08



Название: Miracast (WiFi Display) RTP, RTSP
Отправлено: NoIdea от Октябрь 16, 2018, 17:08
Технологии не стоят на месте, наверное, за этим будущее - уже сейчас телевизоры, телефоны, а теперь и PC (Windows 10) поддерживают эту технологию.

А что с отдельными программами?
Кто-нибудь уже реализовывал в своих приложениях для стрима видео?

В основе всё тот же RTSP, для которого в большинстве случаев используют GStreamer:
https://gstreamer.freedesktop.org/data/doc/gstreamer/head/qt-gstreamer/html/examples.html

С удивлением обнаружил, что Qt, вроде как, умеет стримить "из коробки" для любого приложения:
https://code.woboq.org/qt5/qtbase/src/plugins/platforms/openwfd/
Код
Bash
./helloworld -platform openwfd
Как использовать? Это работает?...
(https://stackoverrun.com/ru/q/5871760)

На сколько понял, реализация в Qt основана на старом, не поддерживаемом проекте:
https://www.freedesktop.org/wiki/Software/openwfd/
Уже есть реинкарнация:
https://github.com/albfan/miraclecast

Ещё натыкался на реализацию от Intel:
https://github.com/intel/wds



Название: Re: Miracast (WiFi Display) RTP, RTSP
Отправлено: Igors от Октябрь 17, 2018, 07:32
Не уверен что вполне понимаю о чем Вы, предполагаю речь идет о захвате видео/аudio с внешних устройств. Мой интерес чуть другой - чтение/запись видео и захват его с экрана, но технология видимо та же. Да, GStreamer. Долго я пытался отвертеться, пытались нанять человека, но увы  :'( Пришлось самому. Впечатления

- многое можно сделать просто командной строкой или ее аналогом в runtime. Богатый набор кодеков, рулить ими научиться несложно. Вообще все очень солидно. "Собирать" самому хотя и можно, но не советуют, предоставляют готовые сборки, очень приятно.

- но если где-то заклинило - решение может оказаться весьма сложным, а то и вообще не найтись. Дока хотя и обильная, но реальных примеров - раз-два и обчелся. Чистый "С" (написано без плюсов) изрядно бьет по ушам. Спрашивать на ихнем mailist - шансов на ответ мало.  


Название: Re: Miracast (WiFi Display) RTP, RTSP
Отправлено: kuzulis от Октябрь 17, 2018, 13:16
У gstreamer не все кодеки аппаратные. Зависит от платформы. Оно более-менее работает в Linux, где для разных видео-карт (или ембеддед железок) сразу в дистрибутиве и gstreamer-овские кодеки для них идут (там где есть аппаратное кодирование). Но если gstreamer нужен для Windows - то нужно очень хорошо постараться чтобы оно заработало с аппаратными кодеками (их надо компилять из отдельных проектов, используя Intel/NVidia SDK и прочую фигню, как мне объясняли, я просто в итоге забил). Под андройд тоже кодеков может не быть.

Мы делали некий проект с передачей некоей двигающейся картинки на удаленный дисплей в режиме "реалтайма", т.е. почти без задержек, картинка передавалась по изменениям, а не с каким-то определенным фрейм-рейтом, через WiFi.

В итоге получилась хрень, т.к. часто возникали артефакты от кодирования и потери кадрови прочая гадость...  Да и сас WiFi еще та какашка. Еще и кодеки не все нормально настраиваемые там.. более менее софтварный x264 там можно поднастроить... Но если аппаратные, да еще для разных платформ - то фигвам :)

ЗЫ: А мож руки у меня кривые.

ЗЫЗЫ: Но как бы там ни было, но ИМХО, альтернативы у gstreamer нету.


Название: Re: Miracast (WiFi Display) RTP, RTSP
Отправлено: NoIdea от Октябрь 18, 2018, 20:39
У Windows 10 при стриме 1080p на телевизор (виртуальный дисплей) через Miracast, это занимает не более 5% CPU и ~8Mbit WiFi хотелось бы сопоставимой производительности, но похоже, что с gstreamer всё не так просто (раз нет аппаратных кодеков под Windows), как и с Miracast (бывают аппаратные ограничения WiFi).

OFFTOP:
А текущую задачу со стримом возможно получится решить и как-то проще через генерацию и отправку JPEG:
https://libjpeg-turbo.org
https://github.com/roehrdor/opencl-jpeg-encoder
Или это дохлый номер?... Просто есть вероятность, что принимающая сторона (аппаратная) сможет принять только JPEG кадры, но боюсь даже представить какого FPS и нагрузки удастся в этом случае добиться.


Вот ещё наткнулся на интересный проект со стримом:
https://github.com/obsproject/obs-studio

Там даже есть аппаратные кодеки, стримит в огромное количество web-сервисов (WebRTC, RTMP)


Название: Re: Miracast (WiFi Display) RTP, RTSP
Отправлено: Igors от Октябрь 19, 2018, 08:00
У Windows 10 при стриме 1080p на телевизор (виртуальный дисплей) через Miracast, это занимает не более 5% CPU и ~8Mbit WiFi хотелось бы сопоставимой производительности, но похоже, что с gstreamer всё не так просто (раз нет аппаратных кодеков под Windows), как и с Miracast (бывают аппаратные ограничения WiFi).
Что там есть или нет - лучше проверить самому, это написания кода не требует. Скачайте и установите GStreamer. Подберите нужные кодеки/модули используя утилиту gst-inspect. Потом запустите цепочку этих модудей утилитой gst-launch направив выход на экран (playbin) или в файл (filesink). Примеры работы с командной строкой найдете, на худой конец есть маны.   

Или это дохлый номер?... Просто есть вероятность, что принимающая сторона (аппаратная) сможет принять только JPEG кадры, но боюсь даже представить какого FPS и нагрузки удастся в этом случае добиться.
Могу только сказать что такой "контейнер" (jpеg анимация) существует давно и используется многими


Название: Re: Miracast (WiFi Display) RTP, RTSP
Отправлено: kuzulis от Октябрь 19, 2018, 09:31
> Скачайте и установите GStreamer. Подберите нужные кодеки/модули используя утилиту gst-inspect

Нет там аппаратных кодеков для Windows!


Название: Re: Miracast (WiFi Display) RTP, RTSP
Отправлено: Igors от Октябрь 19, 2018, 10:40
> Скачайте и установите GStreamer. Подберите нужные кодеки/модули используя утилиту gst-inspect

Нет там аппаратных кодеков для Windows!
Даже если и так - лучше убедиться в этом самому :). И откуда такая уверенность? Навксидку гуглим напр "GStreamer rtsp windows" - совсем не пусто. Пусть товарищ изучает


Название: Re: Miracast (WiFi Display) RTP, RTSP
Отправлено: kuzulis от Октябрь 19, 2018, 12:54
> И откуда такая уверенность?

Оттуда что я уже ранее этим заморачивался. Gstreamer-овское SDK для Windows не содержит никаких аппаратных кодеков. Их нужно искать и компилять самому под конкретную видеокарту.