FluxCast 0.3.0: трансляция рабочего стола Linux на телевизоры стала проще и быстрее
Состоялся релиз FluxCast 0.3.0 — программы на Python, которая передаёт изображение с рабочего стола Linux на телевизоры по протоколам Miracast, DLNA и Chromecast. Код распространяется под лицензией GPLv3, а главные усилия разработчиков были направлены на упрощение установки и снижение задержек. Для пользователей Debian и Ubuntu теперь работает собственный APT-репозиторий.
Раньше deb-пакеты прикреплялись только к страницам выпусков на GitHub, и обновление требовало ручной загрузки подходящей сборки. Достаточно установить пакет fluxcast-repo, который добавляет ключ проверки подписи и файл с параметрами репозитория. Нужная сборка определяется автоматически по версии python3, а не по кодовому имени дистрибутива, поэтому корректно обслуживаются производные системы вроде Linux Mint и Pop!_OS, а также промежуточные выпуски Ubuntu.
Поддерживаются Debian 12 и 13, Ubuntu 24.04 и 26.04 на архитектуре amd64. Индексы подписываются на стороне GitHub Actions, закрытый ключ на сервере не хранится, а ранее опубликованные версии остаются доступны для отката. Появилось окно настроек, вызываемое из меню в системном трее.
Прежде любые изменения требовали правки файла ~/.config/fluxcast/config вручную. Теперь через графический интерфейс на Tkinter можно менять 20 параметров для Miracast и по 8 для DLNA и Chromecast. Вводимые значения проверяются теми же обработчиками, что и при чтении конфигурации, а пользовательские комментарии в файле не теряются при сохранении.
Окно автоматически подстраивается под светлую или тёмную тему оформления системы. Ключевое новшество — поддержка аппаратного кодирования видео через VA-API. Она включается параметром "--wfd-encoder va" и задействует элемент vah264enc.
Если композитный сервер передаёт кадры в виде DMABuf, конвейер "pipewiresrc - vapostproc - vacompositor - кодировщик" обрабатывает данные без копирования в системную память. В тестах на GPU Intel при трансляции статичного изображения нагрузка на процессор упала с 80% до 1% от одного ядра, при движении — с 73–79% до 6–7%, а задержка от изменения на экране до попадания кадра в кодировщик сократилась с 64 до 27 мс. По умолчанию по-прежнему работает программный кодировщик x264, на который система переключается автоматически, если нужные элементы VA-API отсутствуют.
Управление битрейтом задаётся через "--wfd-rate-control", по умолчанию используется режим qvbr. Добавлена опциональная поддержка согласования режимов второй редакции спецификации WFD R2. При активации параметром "--wfd-r2" в запросе M3 дополнительно запрашиваются списки wfd2_video_formats и wfd2_audio_codecs.
Это открывает доступ к режимам, которые приёмник публикует только в рамках R2. Например, на телевизорах LG C2 становится доступен режим 1080p60, отсутствовавший в списке первой редакции, из-за чего запрос 60 кадров в секунду раньше приводил к откату на 1080p30. Если приёмник не поддерживает или отклоняет параметры R2, выполняется возврат к первой редакции.
Пока функция проверена на одной модели телевизора и отключена по умолчанию. Исправлен ряд ошибок. Утилиты iw и wpa_cli больше не считаются отсутствующими, если они лежат в /usr/sbin — этот каталог не входит в PATH непривилегированного пользователя в Debian и Ubuntu, что раньше мешало не только выводу режима "--doctor", но и определению беспроводного интерфейса.
Сам режим "--doctor" теперь предупреждает о незакрытых интерфейсах Wi-Fi Direct, оставшихся после прерванных сеансов, и показывает команды для их удаления. В код WFD-сессии добавлен обработчик SIGTERM, чтобы остановка трансляции из трея корректно освобождала ресурсы и уведомляла приёмник. Устранено искажение пропорций и зависание до 9 секунд при изменении размера окна в сеансах захвата отдельных окон в KDE.
Число потоков кодировщика x264 теперь ограничено значением min(4, количество ядер CPU). В режиме "tune=zerolatency" кодировщик создаёт по одному слайсу на поток, и на системах с 16 ядрами это приводило к избыточному дроблению кадра и росту нагрузки примерно на треть. Интерфейс переведён на турецкий язык, общее число поддерживаемых языков достигло десяти.
Файлы локализации теперь разделены по языкам, что упрощает их поддержку.