Просмотр сообщений
|
Страниц: [1]
|
6
|
Qt / Работа с сетью / Re: Miracast (WiFi Display) RTP, RTSP
|
: Октябрь 18, 2018, 20:39
|
У Windows 10 при стриме 1080p на телевизор (виртуальный дисплей) через Miracast, это занимает не более 5% CPU и ~8Mbit WiFi хотелось бы сопоставимой производительности, но похоже, что с gstreamer всё не так просто (раз нет аппаратных кодеков под Windows), как и с Miracast (бывают аппаратные ограничения WiFi). OFFTOP:А текущую задачу со стримом возможно получится решить и как-то проще через генерацию и отправку JPEG: https://libjpeg-turbo.orghttps://github.com/roehrdor/opencl-jpeg-encoderИли это дохлый номер?... Просто есть вероятность, что принимающая сторона (аппаратная) сможет принять только JPEG кадры, но боюсь даже представить какого FPS и нагрузки удастся в этом случае добиться. Вот ещё наткнулся на интересный проект со стримом: https://github.com/obsproject/obs-studioТам даже есть аппаратные кодеки, стримит в огромное количество web-сервисов (WebRTC, RTMP)
|
|
|
7
|
Qt / Работа с сетью / Miracast (WiFi Display) RTP, RTSP
|
: Октябрь 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
|
|
|
9
|
Программирование / С/C++ / Re: Простой (?) поиск
|
: Октябрь 12, 2018, 19:23
|
вот чего накидал:
Ну все-таки надо думать о производительности и расходе ресурсов (хотя бы иногда ). Создавать многочисленные контейнеры на каждом поиске - ну это уж слишком Если объектов десятки-сотни миллионов, тогда поиск лучше возложить на БД. Что касается производительности, то поиск по хешу О(1) в среднем. Пересечение только замедлить может. Ну в общем, принцип пересечения подмножеств я предложил, дальше вам решать, подойдёт ли он под конкретную задачу. ps: у меня в проекте с 300-2000 тыс объектов подобные индексации используются, производительности хватает, памяти на индексирование до 200мб жрется. Занятно, интересно сравнить по производительности и ресурсам с БД в памяти: http://doc.qt.io/qt-5/qtsql-cachedtable-example.htmlC++ (Qt) QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName(":memory:"); // ...
|
|
|
10
|
Qt / Qt Quick / Re: [РЕШЕНО] Отправка событий мыши в QQuickWindow (залипан
|
: Октябрь 10, 2018, 19:35
|
ВЕРНОЕ РЕШЕНИЕ:QMouseEvent mouseEvent(type, pos, pos, button, Qt::NoButton, Qt::NoModifier); Ранее... Кто бы мог подумать, но решением оказался такой вот костыль:C++ (Qt) QCoreApplication::sendEvent(window_, event); if (event->type() == QEvent::MouseButtonRelease) { auto item = window_->mouseGrabberItem(); if (item) item->ungrabMouse(); }
Синтезированные события были идентичны с реальной мышью, но на перетаскиваемом элементе после синтезированного события MouseButtonRelease, заметил, что если пошевелить мышью, то элемент продолжал перетаскиватся (не отпускался) т.е. получается, что не каждое событие MouseButtonRelease одинаково полезно ;) Остальные элементы, похоже, тоже захватывают мышь и не отпускают по синтезированным сообщениям. Пути QtQuick неисповедимы... Вероятно, что-то делаю не так?...
|
|
|
11
|
Qt / Qt Quick / Re: Какую структуру программы вы делаете при использовании QML?
|
: Октябрь 10, 2018, 00:11
|
При создании интерфейса на QtQuick делал упор на то чтобы каждый элемент и каждое окно отображались и работали отдельно от программы, т.е. можно запустить весь интерфейс или отдельный элемент через qmlscene и проверить его работу.
Модели данных и объекты подхватываются и создаются динамически через qml-синглтон из директории dummydata, в котором находятся qml-файлы имитирующие модели и объекты C++, которые в коде программы реализованы в виде отдельных классов (QObject) с набором свойств, данных и методов, сигналов/слотов если надо.
Такой подход позволят запускать и отлаживать сложный интерфейс столько сколько нужно без пересборки и перезапуска программы - это очень удобно и экономит много времени, хоть и требует создание dummy с заглушками на методы и фейковыми данными...
|
|
|
12
|
Qt / Qt Quick / [РЕШЕНО] Отправка событий мыши в QQuickWindow (залипание)
|
: Октябрь 09, 2018, 22:56
|
Здравствуйте, есть задача, надо отправить сообщения мыши в QtQuick интерфейс - эмуляция мыши (нажатия, перемещения). Но сообщения, почему-то приходят лишь в один (текущий) QML-элемент ( QQuickItem). Казалось бы ничего сложного: C++ (Qt) QQmlApplicationEngine engine; //... auto type = QEvent::MouseButtonPress; auto pos = QPoint(50, 50); const auto button = (type == QEvent::MouseMove ? Qt::NoButton : Qt::LeftButton); QMouseEvent mouseEvent(type, pos, pos, button, button, Qt::NoModifier); QCoreApplication::sendEvent(engine.rootObjects().at(0), &mouseEvent); engine.rootObjects().at(0) - это окно QQuickWindow. Всё это работает в простой реализации, НО не работает на сложных интерфейсах, где много элементов визуальных и не визуальных + 3D графика (Qt3D.Scene3D). Точнее работает, но сообщения приходят лишь в один элемент. Если кликнуть мышью на другой элемент, то сообщения будут уже приходить только ему. А ещё более странное, то что если перед отправкой сообщения сделать окно не активным, а прямо перед отправкой снова сделать активным, то сообщения мыши приходят как положено! Кто-нибудь с таким сталкивался? Что делает чудотворное requestActivate()? https://code.woboq.org/qt5/qtbase/src/gui/kernel/qwindow.cpp.html#_ZN7QWindow15requestActivateEvК сожалению вызывать его постоянно не получится, внутри есть проверка на текущую активность окна, а постоянно деактивировать текущее окно - это уже не костыль, а костылище :)
|
|
|
|
|