LINUX.ORG.RU

Добавить звук в VNC

 , ,


0

2

В лялексовом мире для remote desktop обычно используется VNC. Для wlroots есть сервер wayvnc и он умеет h264, что годно, потому что позволяет мне валяться в постели и играть в Pathfinder с ляптопа в 4k@60fps, наслаждаясь десктопными мощностями.

Но есть нюанс: звук. С одной стороны, сейчас я просто подключаю PA, но хочется полноценной интеграции, чтобы подключился к компу и все сразу хорошо. Парни из qemu почти десять лет назад сделали QEMU Audio, расширение для RFB, которое позволяет встроить звуковую дорогу в VNC сессию. Это работает, и вроде даже работает хорошо: я попробовал в VM, звук не рассинхровывается даже в случае лютого статеринга видео.

Собственно, я хочу добавить QEMU Audio в wayvnc чтобы получить полноценный remote desktop со всеми плюшками из коробки (картинка + буфер обмена + PAM + audio).

Но есть ещё нюанс: я никогда не работал со звуком. Быстрый набросок пайплайна:

  • wayvnc предоставляет sink (pipewire?)
  • приложение вешается на этот синк через галку в UI
  • wayvnc вычитывает из sink’а кадр, сжимает, оформляет как пакет QEMU Audio и пихает в сеть

Насколько этот пайплайн отражает реальность? Каким алгоритмом лучше жать? Как правильные парни синхронизируют звук и аудио из разных источников?



Последнее исправление: cumvillain (всего исправлений: 2)

Ответ на: комментарий от einhander

Sunshine/moonlight

Steam Link, возможно ещё в будущем в Parsec завезут возможность транслировать Linux host, а пока можно только принимать трансляцию с маздая.

Moonlight же вроде только на nvidia карточках работает?

Dr64h ★★
()
Ответ на: комментарий от einhander

Ты не понял, я хочу это запилить в сервер, чтобы не было пирамиды из стеков. Мой вопрос в том как правильно это имплементировать.

Про kasmvnc спасибо, почитаю код еще раз, про звук не видел.

cumvillain
() автор топика
Последнее исправление: cumvillain (всего исправлений: 2)
Ответ на: комментарий от cumvillain

нашлепку сборку или взять проприетарный RDP

ну вряд ли в гноме проприетарное что-то.. Есть фриРДП. Исходники должны быть открыты. Возможно там можно что-то подсмотреть.

Bad_ptr ★★★★★
()

и он умеет h264, что годно, потому что позволяет мне валяться в постели и играть в Pathfinder

Я пытаюсь делать то же самое на vinagre, у меня просто слайд-шоу с видимой прогрузкой квадратиков частей экрана. Локальная сеть, linux-windows, что я делаю не так? На Windows TightVNC.

PPP328 ★★★★★
()
Ответ на: комментарий от cumvillain

Ты не понял, я хочу это запилить в сервер, чтобы не было пирамиды из стеков.

Круто. Мне видится так: инициировать соединение по ssh, данные пихать по ssl, как наиболее быстрый вариант, без защиты не делать. Обычно стартует вся сессия и подгружается все как обычно у пользователя включая звук. Кстати смотри реализацию x2go, с 3д у них не очень, а в остальном полноценный удаленный десктоп.

einhander ★★★★★
()
Ответ на: комментарий от einhander

Круто. Мне видится так: инициировать соединение по ssh, данные пихать по ssl, как наиболее быстрый вариант, без защиты не делать. Обычно стартует вся сессия и подгружается все как обычно у пользователя включая звук. Кстати смотри реализацию x2go, с 3д у них не очень, а в остальном полноценный удаленный десктоп.

Прямо в VNC, никаких SSH. wayvnc уже умеет все нужные схемы авторизации с шифрованием (TLS и RSA). Осталось только протокол со звуком засунуть. Как его засунуть я примерно понимаю почитав код qemu. Меня волнует как его засунуть кошерно :)

Возможно я перегибаю палку и то как его засунули в qemu вполне ок для достаточно быстрой (200mbps+) сети с низкими задержками. Просто хочу второе мнение от людей которые мб этим уже занимались в рамках других проектов.

cumvillain
() автор топика
Последнее исправление: cumvillain (всего исправлений: 3)
Ответ на: комментарий от cumvillain

VNC уже научился различать пользователей? Ssh как раз и отвечает за PAM часть, аутентификацию и авторизацию пользователей. Я специально указал x2go, там как раз ssh отвечает за доступ, если верно помню.

einhander ★★★★★
()
Последнее исправление: einhander (всего исправлений: 1)
Ответ на: комментарий от einhander

VNC уже научился различать пользователей? Ssh как раз и отвечает за PAM часть, аутентификацию и авторизацию пользователей.

Концептуально? Да, вполне: первый демон слушает на 5900. Принимает логин и пароль, проходит PAM, если проходит успешно запускает от его имени пользователя VNC-сервер, передавая ему сокет. Самое забавное что это даже будет совместимо с существующими клиентами.

Вариант с SSH тоже возможен, но там уже сложнее с клиентами. Но мне это пока не особо нужно, у меня на десктопе один пользователь.

cumvillain
() автор топика
Последнее исправление: cumvillain (всего исправлений: 2)

Парни из qemu почти десять лет назад сделали QEMU Audio, расширение для RFB, которое позволяет встроить звуковую дорогу в VNC сессию

в RFB можно любое свое добавлять (если со своим клиентом), даже x264 вместе со звуком.

Но есть ещё нюанс: я никогда не работал со звуком. Быстрый набросок пайплайна

раньше был pulse, просто делаешь сокет + PULSE_SERVER и редиректишь трафик.

anonymous2 ★★★★★
()
Последнее исправление: anonymous2 (всего исправлений: 1)

Как правильные парни синхронизируют звук и аудио из разных источников?

Да, собственно, никак особо. Когда из кему идёт vnc, так там источник аудио и видео - 1. Тут так же надо: тянуть и звук и видео из пайпвари. Тогда, для синхронизации можно использовать PES-пакеты. Чем жать - не важно (ну aac пожми).

anonmyous
()