Привет всем,
Ставил себе на ПК Sunshine и Moonlight клиенты на разные устройства. Столкнулся с рядом сложностей хочу поделиться решением:
Что было нужно:
Подключение к ПК с любого клиента Moonlight к ПК с Sunshine. И что бы виртуальный дисплей работал для любого разрешения и герцовки и что бы физические мониторы отключались в момент трансляции.
Пробовал использовать Apollo, в целом почти как надо работает, но столкнулся с проблемой, что он работает только со своим клиентом Artemis и он только для Android. Я хотел настроить возможность подключения с любого девайса так как обычные Moonlight клиенты сейчас есть для всего:windows, linux, android и даже с портативки завёл rg35xx h.
К самой настройке:
1. Для виртуального дисплея я использовал
Virtual-Display-Driver Пробовал сначала IddSampleDriver мне не понравилось, у меня не получилось завести нормально.
По Virtual-Display-Driver устанавливаем, в файл конфига vdd_settings.xml добавляем нужные разрешения которые есть у наших клиентов. Я вообще все разрешения добавил которые могут быть теоретически у меня. И добавлял во все xml файлы программы потому что так и не понял откуда они берутся. Вообще по идее только из C:\VirtualDisplayDriver
C:\VirtualDisplayDriver\vdd_settings.xml
C:\VDD.Control\Dependencies\vdd_settings.xml
C:\VDD.Control\SignedDrivers\ARM64\VDD\vdd_settings.xml
C:\VDD.Control\SignedDrivers\x86\VDD\vdd_settings.xml
<resolutions>
<resolution>
<width>800</width>
<height>600</height>
<refresh_rate>30</refresh_rate>
</resolution>
<resolution>
<width>1366</width>
<height>768</height>
<refresh_rate>30</refresh_rate>
</resolution>
<resolution>
<width>1920</width>
<height>1080</height>
<refresh_rate>30</refresh_rate>
</resolution>
<resolution>
<width>2560</width>
<height>1440</height>
<refresh_rate>30</refresh_rate>
</resolution>
<resolution>
<width>3840</width>
<height>2160</height>
<refresh_rate>30</refresh_rate>
</resolution>
<resolution>
<width>1280</width>
<height>720</height>
<refresh_rate>60</refresh_rate>
</resolution>
<resolution>
<width>2340</width>
<height>1080</height>
<refresh_rate>60</refresh_rate>
</resolution>
<resolution>
<width>640</width>
<height>480</height>
<refresh_rate>60</refresh_rate>
</resolution>
<resolution>
<width>2266</width>
<height>1080</height>
<refresh_rate>60</refresh_rate>
</resolution>
<resolution>
<width>640</width>
<height>360</height>
<refresh_rate>60</refresh_rate>
</resolution>
<resolution>
<width>854</width>
<height>480</height>
<refresh_rate>60</refresh_rate>
</resolution>
</resolutions>
Эту софтину можно не запускать больше.
Важно:Если при подключении у вас будет разрешение не вашего клиента, которое вы выбрали, а разрешение 800x600 значит в Virtual-Display-Driver в xml нет этого разрешения. Тогда берётся дефолтное разрешение виртуального экрана и физические мониторы не гаснут. Важно в xml прописать нужное разрешение клиента.
2. Устанавливаем Sunshine и переходим в настройки.
В настройках Sunshine выбираем "Audio/Video" и пишем в пункт "Показать Id" - id нашего виртуального монитора. Взять его можно из пункта меню "Устранение проблем" из журналов. Пример id {5eb52002-659f-5729-bdd8-9cdc4efd1bf5}
Далее тут же в "Audio/Video" открываем "Расширенные настройки устройства" и ставим "Конфигурация устройства"-> "Отключить другие дисплеи и активировать только указанный дисплей"
И я ставлю галочку "Настройка отката при отключении", я честно так и не понял нужна она или нет, вроде и с ней и без неё работает. Ставлю для надёжности)
Здесь всё.
3. Дополнительно и не обязательно. Можно сделать что бы при подключении сразу выбиралось нужное масштабирование экрана. К примеру когда с телика 4k подключаешься всё мелко и хочется поставить 200% масштабирование. По умолчанию этой функции нет.
Для этого нужна программа
SetDpi просто качаем и закидываем куда-нибудь.
В Sunshine Переходим в пункт меню "Приложения" и добавляем новое приложение, к примеру "Desktop 125%"
И там пишем в "Команды подготовки"
cmd /c "timeout /t 2 & "C:\SetDPI\SetDpi.exe" 125 1 & exit 0"
125 - это масштаб, 1 - это виртуальный монитор. Когда подключаешься он всегда первым делается. Но если не будет работать пробуйте менять 1 на 2, 3 и т.д.
Для обычного подключения я добавил 100%
cmd /c "timeout /t 2 & "C:\SetDPI\SetDpi.exe" 100 1 & exit 0"
Я наделал сразу все масштабы и картинки к ним для наглядности, а то у большинства клиентов названия скрыты.
4. Мне не нужно что бы Sunshine и виртуальный дисплей работали всегда.
Для этого я сделал два батника на запуск и остановку сервера. Вместе с сервером отключается драйвер виртуального дисплея.
start_sunshine.bat
@echo off
:: Включаем виртуальный монитор
"C:\VDD.Control\Dependencies\devcon.exe" enable "Root\MttVDD"
:: Ждем 3 секунды
timeout /t 3 /nobreak
:: Запускаем службу Sunshine
net start "Sunshine Service"
stop_sunshine.bat
@echo off
:: 1. Останавливаем службу Sunshine
net stop "Sunshine Service"
:: 2. Небольшая пауза
timeout /t 2 /nobreak
:: 3. Отключаем виртуальный адаптер
"C:\VDD.Control\Dependencies\devcon.exe" disable "Root\MttVDD"
Ну и понятно к ним два ярлыка на рабочий стол. Теперь сервер стартует вместе с виртуальным дисплеем, а когда не надо гасится. Запускаю от имени администратора.
Как итого: Работает отлично.
Запускаю сервер с дисплеем ярлыком. И спокойно подключаюсь с любого стандартного клиента. При этом физические мониторы на ПК гаснут и не видно что происходит там. Уже поиграл с телика, приставки, телефона, ноута) Проблем не было.
Сообщение отредактировал Rorbi123 - Вчера, 14:30