Комментарии 18
Лучшее десктопное приложение это то, что не делается вебом.
Пару недель назад попытался на Rust + Tauri накидать довольно простое приложение. Надо забрать кадры из внешней железки (DeckLink UltraStudio HD Mini), показать их на экране и положить на диск. С тем чтобы забрать кадры и положить на диск - проблем особых не возникло, но отобразить их - к сожалению в Tauri у меня так и не получилось. Я не очень хорош в Web технологиях и скорее всего сделал что-то не так, но с лету другого решения не нашел.
Кадры в YUV преобразовал в RGB, потом в base64, просунул через IPC в WebView и отобразил на Canvas. Больше всего времени занимала передача данных от бэка на фронт. По этой причине не удалось добиться 1080p50. Подключил Cursor в этот процесс и не особо вдаваясь в подробности - попросил оптимизировать. Не вышло.
За за пару запросов - фронт был сменен с Tauri на egui. 1080p50 поехало без особых проблем. С задержкой в 2 кадра от входного сигнала.
Резюмируя.
Пока нет необходимости гонять кучу данных с бека на фронт - WebBased Desktop фреймворки норм. Но как только появляется нагрузка на IPC - пиши пропало.
Да, связь бэкенда с фронтендом в данном случае самое слабое место всех подобных приложений.
из интересных есть ещё Dioxus.
Видео через Base64, извините, но вы тот ещё извращенец! Это же битовый формат, неэффективно его в текстовый и обратно переводить. Web давно освоил аудио и видео потоки без всяких фреймворков.
Раз уж вы так высказываетесь обо мне - расскажите пожалуйста подробнее, как мне правильно решить поставленную задачу, я обязательно попробую снова.
Извините, я не хотел вас задеть. Хотя мне не очень ясна ясна поставленная задача, но уверен, уже есть готовый инструмент под неё.
Если задача отобразить видео на экране ПК, к которому подключена ваша железка UltraStudio HD Mini, то от производителя есть программа UltraStudio, которая покажет видео на экране и на диск положит. Или старый добрый OBS Studio.
Если отобразить видео на удалённом ПК через Интернет, то те же UltraStudio / OBS Studio умеют стримить в куче форматов (https://www.blackmagicdesign.com/products/ultrastudio/software , раздел Broadcast). Клиентской программой может быть почти любой видеоплеер.
Если отобразить видео в веб-приложении (то что вы попытались сделать) то на ПК подключенном к железке поставьте стриминговый сервер, умеющий получать видеопоток и пересылать веб-клиентам:
Nginx + модуль RTMP/HLS
SRS
MistServer
MediaMTX
Janus WebRTC
тот же OBS Studio
А в вашем веб-приложении на html странице укажите в теге <video> адрес видеопотока на сервере.
Если никакой готовый софт не подошёл и кроме клиента вы хотите завелосипедить и сервер, то передавайте поток через socket (websocket если у вас веб-сервер).
Все верно, я не до конца объяснил задачу. Разумеется, я понимаю что такое WebRTC / RTMP / HLS. Смысл в том, чтобы делать это все без задержки и с минимальной нагрузкой на железо. Все что вы предлагаете - кодирует / декодирует видео для того чтобы его просто показать. В том что у меня в конечном итоге получилось - только цветовое преобразование из YUV в RGB и задержка в 1-2 кадра от источника.
OBS очень люблю как софтинку и многими решениями - вдохновляюсь для выполнения своих задач. (В ней кстати похожим образом реализован показ, только там ещё отдельно обрабатывается звук и синхронизируется с видеопотоком) Но из нюансов - используется сглаживание, которое не возможно отключить.
Поддерживаю! Автор издевается.
Бинарные вебсокеты решили бы проблему идеально. Уверен они уже реализованы на всех ЯП. Сервер на бэке, клиентом подключайтесь и лить прям в текстуру GPU без преобразований или Canvas
Даёшь натив!
Tauri я в этот список включать не стал, так как учить Rust
Tauri можно пользоваться без знания Rust. достаточно привычных вам js/ts.
Вот более подробное и полное сравнение: https://github.com/Elanis/web-to-desktop-framework-comparison
Ещё сделал такой вариант: сервер на delphi7 в 343 кб запускает установленный в windows браузер Chrome в режиме приложения и показывает в нем указанный html+js. При этом js может всё что и delphi, а если не хватит можно добавить. И ещё там можно создать один exe файл, который включит в себя всё что нужно в упакованном виде и будет работать, не требуя других файлов. Таким способом сделал плеер ТВ из интернета в 514 кб и анимацию картинок: https://github.com/prog-mania/fani/blob/main/fani.exe
Вспомнил ещё один старый способ создать exe приложение из html+JS, используя программу mshta.exe, входяшую в windows. Хотя JS в mshta без излишеств, зато есть доступ к системе через activX. Поэтому сервер не нужен и exe может быть маленький. Например, игра крестики-нолики всего 17 кбайт: https://github.com/prog-mania/fani/blob/main/h2exe/xo.exe

Сравниваем современные подходы к разработке десктопных приложений на веб‑технологиях: ElectroBun, NeutralinoJS и Wails