Пользователь
0,0
рейтинг
11 апреля 2014 в 08:50

Администрирование → Практический 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
@Landgraph
карма
8,0
рейтинг 0,0
Пользователь
Реклама помогает поддерживать и развивать наши сервисы

Подробнее
Спецпроект

Самое читаемое Администрирование

Комментарии (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 трафик, но сам эксперимент удачный.
  • 0

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