Практический streaming игр

  • Tutorial
История о том, как я открыл для себя стриминг игр и что из этого получилось с пошаговой инструкцией.

Посвящается всем, кому интересно эффективное использование имеющихся аппаратных средств.

Введение


Так уж получилось, что жена мне подарила «приставку» к телевизору в виде мощного игрового ПК. ПК был успешно подключен к телевизору и до последнего времени приносил много приятных минут игры на большом экране.

Но, во-первых, не во все игры удобно играть на телевизоре, в тех же шутерах и RTS мне гораздо удобнее играть сидя за столом.
Во-вторых, очень «удачно» сломался единственный выход с игрового ПК — телевизор.
В-третьих, мой проверенный временем рабочий ПК (ноутбук) уже давно перестал быть топовым и далеко не все игры даже сносно удаётся запустить на нём, а менять только потому что не удаётся поиграть — совершенно не повод.
В-четвёртых, иногда возникает непреодолимое желание поиграть с работы, а там далеко не все порты открыты (да, даже для себя на работе я закрыл практически все порты)…

Была поставлена задача: обеспечить доступ к ресурсам игрового ПК с других компьютеров, в т.ч. удалённых.

Обзор решений


В качестве решений рассматривалось ПО, которое использует аппаратное кодирование видео с помощью видеокарты.

Из доступных и бесплатных решений на сегодня я нашёл только стриминг через Steam и относительно доступное решение – встроенный в Nvidia GeForce Experience – стриминг для консоли Shield.

Чем не устроил стриминг через Steam – это необходимость (на данном этапе) иметь компьютеры в одной широковещательной сети, что не позволяет работать с удалённым ПК через маршрутизируемую сеть. Даже поднятие L2TP туннеля не исправило ситуации – клиенты Steam не видят друг друга. Также обнаружилась проблема со звуком при стриминге через Steam: если в системе нет активных звуковых устройств (у меня, например, единственный вывод звука – HDMI, а если он не подключен – то вывода нет), то некоторые игры или не запускаются (Skyrim) или идут без звука. У Nvidia такой проблемы нет.

Большой плюс стриминга Steam — работа «из коробки». С решением же GeForce Experience пришлось несколько повозиться – оно предназначено только для консоли Shield…

Восстанавливаем справедливость


На просторах интернет был найден интересный проект LimeLight, который добавляет функционал Shield на любые Android устройства, но что более важно – реализует стриминг на Windows, Linux и MacOS X. И даже Raspberri Pi.

Вещание поддерживается с разрешением: 1280x720 (30 или 60 кадров) и 1920x1080 (30 или 60 кадров). Управление поддерживается как с помощь клавиатуры/мыши, так и с помощью контроллера, подключенного к компьютеру-клиенту (возможность организовать стриминг на слабый ПК, подключенный к телевизору и играть с помощью контроллера).

В последней версии GeForce Experience была добавлена возможность добавлять альтернативные (без заявленной поддержки стриминга для Shield) игры, но пока отображение списка игр не реализовано в LimeLight. Поэтому Steam — наше всё, по умолчанию при старте – запускается Big-Picture Steam и уже в нём можно выбрать любую доступную игру или программу.

Переходим к практике


Системные требования:
  • нужно иметь карту серии не ниже 600, также поддерживается мобильная линейка 700M, 800M и некоторые 600M;
  • на компьютере-клиенте (на котором фактически будем играть) должна быть установлена Java (по версии ничего не скажу, у меня работает и на 6, и на 7), жёстких требований иметь на клиенте видеокарту Nvidia нет;
  • на компьютере-хосте (на котором будет фактически запущена игра) должен быть установлен Steam;
  • на компьютере-хосте желательно отключить UAC, т.к. могут быть проблемы с запуском некоторых игр (обычно мультиплеерных);
  • на компьютере-хосте должна быть установлена клиентская ОС (Windows 7, 8), на серверной ОС не получилось запустить из-за внутренних особенностей серверных ОС;
  • если вся работа идёт удалённо – необходимо на компьютере-хосте включить авто-вход в систему.


Шаг 1. Заходим на limelight-stream.com, выбираем нужную платформу, если это ПК — github.com/limelight-stream/limelight-pc/releases и качаем пакет под нужную ОС. Выбор win64 или win32 (или lin32, lin64) зависит от того, какая версия Java будет использоваться.

Шаг 2. Создаём ярлык: «Путь\к\Яве\java.exe –jar “Путь\к\limelight-win64.jar”», например, «C:\Program Files\Java\jre6\bin\java.exe» -jar C:\Users\User\Desktop\limelight-win64.jar


Шаг 3. Запускаем утилиту созданным ярлыком.


Шаг 4. Из компьютера-клиента и компьютера-хоста (на котором будут запускаться игры) нужно сделать пару хост-контроллер. Для этого нужно указать IP-адрес хоста и нажать кнопку Pair. После этого на компьютере-хосте появится сообщение о том, что новое устройство Shield хочет подключиться.

Кнопку надо нажать именно на хосте, в активной пользовательской сессии. Пробовал подключаться через RDP к этой сессии пользователя – там сообщения показано не было, так же исчезло и упоминание о Nvidia Shield в оснастке GeForce Experience. Поэтому можно воспользоваться любым Remote Administrator, TeamViewer, Ammyy Admin и т.п. продуктами, если нет физического доступа к консоли хоста (например, с работы).

На хосте нажимаем зелёную кнопку «Подключить» (Connect):


На клиенте:


Собственно на этом всё. Теперь можно нажать кнопку «Start Streaming» и подключиться к игровому компьютеру. К сожалению, после каждой перезагрузки компьютера-хоста приходится восстанавливать подключение.

Развиваем тему


Как запустить, например, танки, которых нет в Steam. Запускаем Steam и добавляем новую игру. Я таким же образом в Steam импортировал IPTV Player чтобы получить единую точку входа своего «медиацентра» для просмотра IPTV.



Далее нажимаем «Обзор» (Browse) и выбираем в каталоге танков файл, который запускает игру, именно игру, а не загрузчик и т.п., для танков это WorldOfTanks.exe, это важно, т.к. через WOTLauncher.exe не запускается.


И добавляем в библиотеку.

Заключение


После вышеописанных действий стриминг должен заработать и можно спокойно поиграть в танки. По локальной сети (1Гбит/с) работает отлично на 1920х1080х60Hz, удалённо через VPN L2TP удаётся поиграть на 1280х720х30Hz.

Что мы имеем в результате:
  • мощный медиацентр поключенный к ТВ с возможностью играть на большом экране во всякого рода слешеры (или наоборот слабый медиацентр и стриминг с мощного ПК на телевизор);
  • независимость от других членов семьи – хочешь поиграть – не обязательно занимать телевизор;
  • использование старого железа, играть можно на всём, что может нарисовать 1280х720;
  • можно играть в одни игры на ТВ, в другие – на ПК за столом, можно вообще на любом планшете, если управление позволяет;
  • разделение ресурсов между членами семьи — каждый может играть на своём ПК, используя мощь семейной игровой станции, не нужно каждому покупать топовое железо.


К сожалению ничего не могу сказать по поводу версии для Android, т.к. есть только планшет на нём. Было бы интересно — стриминг на андроид-приставку к телевизору. Если у кого-то есть возможность проверить — буду признателен.

Надеюсь, статья была интересна и/или полезна, спасибо за уделённое время!

Обнаруженные «особенности»


1. Не работают игры Left 4 Dead 2, Portal 2, возможно, другие производства Valve, с другими производителями проблем не замечено. При чём не работает как в стриминге через GeForce Experience, так и в родном Steam.
2. Утилита пытается выставить значение разрешения максимально близкое к выбранному формату вещания (например, выбрано вещания 1280х720). Но на некоторых мониторах (с соотношением сторон, отличающимся от 16:9) могут быть проблемы в виде широкой чёрной рамки. Решается масштабированием к наиболее подходящему разрешению через панель управления.

3. Иногда выбивает Steam, после этого помогает только перезагрузка.

Ссылки


1. LimeLight
2. GeForce Experience
3. Загрузка Java
Поделиться публикацией
Похожие публикации
AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама
Комментарии 20
  • 0
    За статью спасибо.
    Вы не пробовали в качестве клиента использовать машину с Linux? Проблемы были?
    • 0
      Не пробовал, но пока разбирался с некоторыми проблемами успел почитать код. Проблем быть не должно, суть клиента — получить поток от хоста, разжать и нарисовать картинку. Ну и заодно отправить действия пользователя — хосту.

      Основные проблемы были именно на хосте, независимые от клиента — несовместимость GeForce Experience с серверными ОС, непонятные вылеты игр Valve…
    • 0
      Интересное решение, спасибо за статью. Вполне себе способ вынести на балкон шумящую и гремящую (из-за системы охлаждения CPU и GPU) рабочую станцию, в обычное время занятую майнингом биткоин выполняющую роль медиасервера и прочего для домашней сети, и на ней играть с бесшумного терминала.

      Я, кстати, может быть пропустил: ускорение, сглаживание и т.п. — все это есть в тех же объемах, как если бы играть пришлось прямо на физическом железе?
      • 0
        А, вот еще вопрос: а что с инпут-лагом? Как быстро реагирует на контроллеры и т.п.?
        • 0
          Лагов не замечал. Может быть для кибер-спортсменов будут какие-то неудобства… Пробовал запускать танки через VPN работа-дом — разница между нативным режимом и стримингом — в артефактах сжатия видео, в управлении разницы не заметил.
        • 0
          Да, всё в тех же объёмах. Единственное — при проблемах в канале могут наблюдаться артефакты сжатия, но если канал позволяет — картинка не отличима на глаз.
          • 0
            Кстати, первоначальная идея была купить 1-2 дополнительных монитора, KVM, поставить игровую станцию «под боком» и протянуть 10-20 метровый HDMI к телевизору с разного рода беспроводными контроллерами, клавиатурами, мышами и прочим…

            Но, во-первых, станция шумит, даже несмотря на то, что стоят 12см тихие вентиляторы Zalman (но их 4 шт в корпусе).
            Во-вторых наблюдались проблемы с управлением — если игровой контроллер с нормальными батарейками работает очень даже хорошо, то клавиатура и мышь имеют свойство отваливаться из-за помех.
            В-третьих, это не шаринг ресурса игрового ПК, а опутывания себя проводами.
            В конце-концов это оказалось дороже (1 самый простенький IPS монитор удобоваримого качества — от 7000 начинается, гигабитная сеть по квартире укладывается в 1000).

            Пока игровая станция стоит в зале рядом с телевизором, но в планах — унести на балкон, а туда протянуть оптику, но останавливает цена проекта — порядка 3 тыр за оптику на балкон.
          • 0
            Пару дней назад пробовал LimeLight. На смартфоне поиграть не получилось из-за лагов потока с хоста, при этом на ноутбуке вполне неплохо игралось в Team Fortress 2. Дело похоже в том, что смартфон пытается экономить соединение: использование канала у него получается 6-15 Мбит/с, против 11-12 Мбит/с у ноутбука.
            • 0
              Правильно ли я понял что ширина потока не зависит от разрешения экрана у клиента?
              • 0
                Да. В GeForce Experience сейчас выбор из четырёх возможных потоков: 1280х720х30, 1280х720х60, 1920х1080х30, 1920х1080х60. Все остальные преобразования идут на клиенте. Даже если на клиенте резрешение 320х240 он получит поток 1280х720.

                Steam, вроде бы, подгоняет ширину разрешение потока под разрешение клиента.
            • 0
              А каким образом Stream capture'ит видео? DLL injection делает что ли?
              А что если VNC, VBOX RDP пустить вместо игрушки?! =)
              • 0
                Не совсем понял вопрос про то «как капчурит»? Захват видео отдельная большая тема по программированию с элементами canvas, directshow, opengl

                Вообще у меня получается запустить «не игру», через limelight можно при определённом стечении обстоятельств (вылет игры) получить просто удалённое управление ПК, но дальше начинаются проблемы с запуском игр и нужно перезагружать хост. Пока чёткой закономерности не выявил. Уже подумываю сделать какую-нибудь программу-заглушку для получения удалённого доступа через стриминг. Другой вопрос — зачем?..

                • 0
                  Из Вашего коментария я делаю вывод, что capture происходит с видеокарточки напрямую…
                  Зачем?! Да мне Gaikai понравился… Хотелось бы иметь нечто open-source win/lin и с большой кнопкой «Сделать зашибись!».
                  • 0
                    В принципе — всё верно, только делается или стандартными средствами Windows, или через фильтры DirectShow, или функционалом OpenGL — зависит от того что сейчас на экране.

                    ИМХО, время сервисов на подобии GaiKai ещё не пришло: слишком медленные каналы и большие задержки (что ещё хуже). Единственный вариант — ставить сервера в точках обмена траффика, чтобы хоть как-то уменьшить задержки… Но это очень большие финансовые вложения (в России). Поэтому ждём 10Гбит в каждый дом, а потом открываем стриминг за деньги.
              • 0
                Печально, что нельзя при таком стриминге использовать компьютер.
                • 0
                  Это с одной стороны, а с другой стороны — он, по идее, должен нагружаться на столько, что свободных ресурсов не останется для параллельной работы.

                  А если ресурс позволяет, то можно поднять виртуализацию с пробросом видеокарты в гостевую ОС и стримить уже из гостевой ОС… Но это уже как-то слишком хитро для домашней системы?
                • 0
                  Интересно, Steam должен быть обязательно в онлайн-режиме или по локалке будет работать и оффлайн? Скажем, для того, чтобы играть в танки (то есть и через интернеты, и стим тут ни при чем)
                  • 0
                    Если использовать стриминг от Nvidia — то оффлайн работает без проблем.
                  • 0
                    Streaming steam игр для нелокальных компьютеров работает с помощью hamachi. Steam клиенты видят друг друга не сразу (3-10сек). Для теста ноутбук был подключен через телефон к beeline 3g, игровой компьютер подключен к qwerty. На обоих был запущен steam и hamachi, в hamachi была создана одна сеть. Через небольшое время клиент на ноутбуке увидел игрушки на пк и предложил стрим. Игра запустилась покадрово и начала быстро кушать 3g трафик, но сам эксперимент удачный.

                      Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.