Документация HLTV

Сообщения
496
Реакции
618
Помог
16 раз(а)
Вводная
Half-Life TV позволяет неограниченному числу зрителей наблюдать за игрой онлайн. Они просто заходят на определённый сервер и смотрят из режима Spectator(так, как будто умерли).
Зрители невидимы для игроков и не могут с ними взаимодействовать. Каждый может выбрать свой режим просмотра(Вид от 1 лица, от 3, свободная камера и.т.п.), индивидуально наблюдать за любым игроком.
Поддерживаются моды Half-Life, наиболее популярны
  • Counter-Strike
  • Team Fortress Classic
  • Day of Defeat
Для наибольшего погружения в просмотр можно использовать режим Auto-Director.
В нём камера автоматически меняется расположение так, чтобы показать сцены с наиболее интересной точки обзора.
Такой зритель может расслабиться, откинуться на диванчик и не бояться, что пропустит нечто интересное.
Во время просмотра зрители могут общаться в своём зрительском чате.

HLTV предоставляет администратору полный контроль над своей системой: можно изменить число слотов, добавить текстовые сообщения, поменять логотип.
Вещание игры идёт с задержкой, по умолчанию 30 секунд. Это делается во избежание подсказок участникам игры зрителем. Настройки по умолчанию рассчитаны на 100 зрителей. HLTV запросто поддерживает и больше, однако в таком случае нужно заранее рассчитывать нагрузку на сеть, процессор и оперативную память.

Наблюдение за игрой в реальном времени
Надо просто зайти на сервер HLTV через клиент игры. Точно также, как вы заходите на игровой, только на игровой вы зайдёте поиграть, а на HLTV - посмотреть. Открыли клиент игры, нашли нужный вам сервер и зашли.
Либо в консоли клиента прописать connect ip:port
Например, connect 10.100.45.73:34210
По умолчанию используется порт 27020, однако он может быть изменён администратором.

Как уже говорилось, режимов просмотра несколько: [B]Chase cam[/B], [B]First Person[/B], [B]Free Look[/B], [B]Map Overview[/B] и [B]Map Chase[/B].
Режимы меняются нажатием клавиши SPACE. Меню вызывается при помощи CTRL. Клавиша E (USE) вызывает режимы Picture-In-Picture.
Зрителям доступны консольные команды:


Команда​


Значение по умолчанию​


Минимальное значение​


Максимальное значение​


Краткое описание​


spec_autodirector​




1​




0​




1​


Включить/выключить режим Auto Director​


spec_drawcone​




1​




0​




1​


Включить/выключить угол обзора на миникарте​


spec_drawnames​




1​




0​




1​


Показать имена игроков под иконками​


spec_drawstatus​




0​




0​




1​


Показать инфо(время, карта и.т.п.)​


spec_pip​




0​




0​




1​


Включить/выключить режим Picture-In-Picture​


spec_mode​




1​




1​




6​


Переключение между режимами просмотра​


spec_menu​




-​




-​




-​


Открыть меню​


spec_help​




-​




-​




-​


Показать help​

Режимы просмотра spec_mode по порядку от 1 до 6:
  1. Locked Chase
  2. Free Chase
  3. Free Roaming
  4. First Person
  5. Map Overview
  6. Chase Map Overview
Режимы просмотра spec_pip:
  • Отключен
  • Free Chase
  • First Person
  • Map Overview
  • Chase Map Overview

Основы HLTV
Как уже говорилось, ядром вещания является сервер HLTV, также его называют HLTV proxy.
Сам по себе является исполняемым консольным приложением, работающим как HLDS.
Для начала трансляции HLTV proxy присоединяется к серверу HLDS в качестве обычного игрока.
Далее зрители заходят на HLTV proxy и смотрят трансляцию из игры.

Число зрителей, поддерживаемых одним сервером HLTV зависит от оборудования и сети. Теоретически их может быть до 255.
100 зрителей требуют не менее 2 Мбит/с. С учётом различных эффектов, сообщений HUD это число может быть больше.
Если зрителей больше 255, то следует подключить дополнительные HLTV Proxy.
Первый подключившийся HLTV proxy называется Master proxy. Остальные HLTV Proxy подключаются не к HLDS, а к Master proxy и называются Relay proxies. Например, может быть так:

Scheme1.jpg

Длина цепи HLDS -->Master Proxy-->Relay Proxy не ограничена. На схеме 3 Relay HLTV Proxy, в итоге трансляцию могут смотреть до 255*3=765 зрителей.
Желательно чтобы HLTV Proxy находились в разных сетях для гарантии максимального использования пропускной способности.


Вещание
Давайте рассмотрим наиболее простую конфигурацию: один HLTV proxy в локальной сети(LAN).
Для работы HLTV надо сперва установить HLDS. HLDS включает в себя файлы HLTV.
Запустите приложение HLTV (иконка HL с маленькой камерой). Откроется консоль HLTV и покажет ряд стандартных сообщений инициализации.
Если инициализация идёт слишком долго, то возможно, что HLTV не может получить ответ от IP-адреса. В этом случае запустите HLTV с параметром -nodns.
После завершения инициализации консоль готова к выполнению команд. Каждая консольная команда сопровождается префиксом '>'.
Дадим нашему HLTV Proxy какое-нибудь имя.
>name "My HLTV Proxy"

Предположим, вы запустили HLTV Proxy на хосте 192.168.1.2 и игровой сервер HLDS на 192.168.1.3:27015
Приконнектим HLTV к HLDS
>connect 192.168.1.3:27015

Через пару секунд HLTV присоединится и готов к заходу зрителей.
Убедимся, что HLTV Proxy присоединился корректно. Введём команду
>status

Ответ будет примерно таков
Код:
--- HLTV Status ---
Online 00:23, FPS 79.0, Version 2435 (Win32)
Local IP 192.168.1.2:27020, Network In 1.7, Out 1.0, Loss 0.00
Local Slots 128, Spectators 0, Proxies 0
Total Slots 128, Spectators 0, Proxies 1
Source Game Server 192.168.1.3:27015, Delay 30
Server Name "Half-Life dedicated server"
Time 01:35, Game "valve", Map "maps/rapidcore.bsp", Players 1
Команда status покажет IP-адреса HLTV, сервера HLDS, fps,число слотов, название, входящий и исходящий трафик в kB/sec.
Local slots - число слотов под зрители на этом HLTV.
Total Slots - число слотов под зрители на всех HLTV, вещающих игру.
Аналогично со Spectators(зрителями).
Source Game Server(источник) может быть игровым сервером как у нас сейчас, другим HLTV proxy или вообще демкой .dem.

Запись демо HLTV
Демки HLTV имеют тот же формат .dem, что и обычные демки, записанные непосредствено из игры, Half-Life, однако имеют больше опций при просмотре больше. Можно выбирать режим обзора, точку обзора.
Проигрывается такая демка через клиент игры, HLTV Proxy при просмотре не требуется.
Достаточно закинуть демку в папку с игрой, зайти в клиент игры и прописать в консоли playdemo <demoname> или viewdemo <demoname>.
Playdemo просто запустит демку, а viewdemo позволит перематывать, замедлять и ускорять запись.
Для записи демки HLTV вам надо присоединить HLTV Proxy к игровому серверу и в консоли прописать
>record <name>

После этой команды начнётся запись. Демо сохранится в директории мода. Для Counter-Strike 1.6 это папка cstrike.
Все демки сохраняются в формате <name>-<YYMMDDhhmm>-<map>.dem.
  • name // имя
  • YYMMDDhhmm // дата
  • map // название карты
Чтобы убедиться, что запись идёт, отправьте команду
>status
Останавливается запись командой
>stoprecording

Зачастую HLTV Proxy используется только для записи демок, а не для просмотра игры онлайн.
В этом случае оптимально выставить следующие настройки
Код:
>maxclients 0   // Запрещаем заходить зрителям
>delay 0        // Убираем задержку
>rate 10000     // максимальный rate
>updaterate 20  // стандартный update rate
>nomaster 1     // не регистрируемся в мастерсервере
Вещание для большого числа зрителей
Как ранее говорилось, можно сделать вещание для большого числа зрителей, больше 1000.
Главным правилом должно быть Качество, а не количество. Пусть лучше у нас будет меньше слотов, но зато зрители не будут страдать от лагов и выкидываний с сервера по таймауту.
Точно рассчитывайте пропускную способность вашей сети и исходя из неё - число зрителей на вашем HLTV Proxy.
Процессор и оперативная память на современный компьютерах не особо важны. Узким местом скорее всего будет именно сеть.
Ниже приведён список различных вариантов подключения к Internet и максимальное число зрителей:


Тип соединения​


Скорость​


Максимальное число зрителей​


ISDN​


64 Кбит/с​


2​


DSL​


128 Кбит/с​


5​


T1​


1.5 Мбит/с​


75​


LAN​


10 Мбит/с​


500​


T3​


75 Мбит/с​


4000​


Максимальное число зрителей для конкретного HLTV Proxy устанавливается командой maxclients.
Убедитесь что maxrate имеет приемлемое значение, хотя бы 3500 КБит/с. Значения меньше не запрещены,
но могут у зрителей спровоцировать choke.
Команда maxrate не влияет на пропускную способность между различными серверами HLTV proxies, влияет только на зрителей.
Для снижения нагрузки на сеть можно убрать чат в HLTV (chatmode 0) или понизить
updaterate с 20 до 10 (updaterate 10). Снижение updaterate сэкономит 25% трафика. Если вы используете HLTV НЕ для записи демок, а только для просмотра игры онлайн, то это будет разумным компромиссом.
Часто в случае крупных вещаний подключают к одной игре 2 HLTV Proxy. Один для VIP зрителей, другой для обычных.

Теперь предположим, что HLDS находится в закрытой сети LAN и к нему нет доступа извне.
Такое решение делает нас неуязвимыми для атак. Как организовать трансляцию в этом случае?
Первый HLTV proxy (HLTV master) стартует в сети LAN, его IP следует держать в секрете.
Второй HLTV Proxy запускаем снаружи. Второй сервер подключается к Первому.
Второй сервер является публичным, его IP даём зрителям. Если надо больше зрительских мест, чем может вместить один HLTV Proxy, то Второй сервер делаем диспетчером(HLTV Dispatcher): устанавливаем ещё несколько HLTV Proxy и подключаем их к нему.
Этот же метод можно использовать для распределения нагрузки между различными сетями.
Таким образом сервер трансляции из игры HLTV master server защищён от атак и проблем с сетью. Например, он будет писать демки в высоком качестве.

Scheme2.jpg

В схеме зритель подключается к HLTV Dispatcher. Dispatcher автоматически перекидывает зрителя на один их трёх подключенных к нему HLTV Proxy. Игровой сервер находится во внутренней сети, HLTV Master тоже. Таким образом никакая атака или сбой сети интернет не могут прервать трансляцию на HLTV Master и демка будет записана в любом случае. Нагрузка на сеть распределена более-менее равномерно между тремя HLTV Proxy. Единственным уязвимым звеном является HLTV Dispatcher.

Конфигурационные файлы HLTV master и HLTV Dispatcher различаются.

master.cfg
Код:
nomaster      1        // отключаем WON-регистрацию на мастерсервере. Тем самым делаем HLTV видимым только для тех, кто знает IP адрес
proxypassword MyPWD    // защищаем HLTV server
publicgame    0        // не показываем серверный IP
dispatchmode  0        // не перенаправляем зрителя на другие HLTV
dispatcher.cfg
Код:
forcemaster  1         // включаем WON-регистрацию на мастерсервере
publicgame   0         // не показываем серверный IP
dispatchmode 2         // перенаправляем всех зрителей на другие HLTV
hostname     MyGame    // имя сервера HLTV
Если запущено одновременно 3 и более сервера HLTV, то будет удобно будет использовать rcon для управления.
Чтобы включить rcon, пропишите его в поле adminpassword.
Установка proxypassword позволит подключение одного HLTV к другому HLTV только по паролю.
Это введено на случай если кто-то, кто знает IP вашего HLTV, захочет к нему подключить свой HLTV и тем самым увеличит сетевую нагрузку.

Конфигурация HLTV
Команда может иметь один или несколько параметров. Необязательные параметры заключены в квадратные скобки '[ ]'.
В таблице ниже встретятся следующие обозначения:
  • <string> : текст. Если содержит пробелы, то должен быть в кавычках. "My Name"
  • <n> : целое число, например 42
  • <f> : число с плавающей точкой, например 4.2
  • <IP:Port> : IP адрес и порт, например 192.168.130.42:27020
  • <a|b|c> : набор опций, например a или b или c
Спецсимволы <, >, |, [ or ] не являются частью консольных команд.


Команда​


Аргументы​


Описание​


connect​


IP:Port​


IP:Port игрового сервера, к которому присоединится HLTV proxy​


disconnect​


-​


Отключение HLTV от игрового сервера, но не остановка вещания. Все зрители остаются подключенными.​


stop​


[ text ]​


Отключение от игрового сервера, отключение всех зрителей и сотановка записи демо. Опционально проигрывается прощальное сообщение.​


quit​


1​


Завершение процесса HLTV​


retry​


0​


Попытаться переподключиться​


autoretry​


0/1​


Если включено, proxy сделает попытку переподключения при обрыве связи​


name​


text​


Название HLTV proxy в таблице фрагов​


hostname​


text​


Название HLTV в списке серверов(server browser)​


serverpassword​


text​


Устанавливает пароль на игровой сервер​


adminpassword​


text​


Устанавливает пароль для использование RCON и комментатора​


proxypassword​


text​


Устанавливает пароль для relay proxies​


spectatorpassword​


text​


Устанавливает пароль для зрителя. Will also exclude proxy from global load balancing​


clients​


-​


Список зрителей​


proxies​


-​


Список relay proxies​


players​


-​


Список игроков на игровом сервере​


kick​


ID​


Выкидывает(кикает) зрителя из HLTV proxy​


bann​


IP​


Банит IP-адрес​


clearbanns​


-​


Очистить список забаненный IP​


say​


text​


Посылает сообщение на игровой сервер(чат с игроками)​


msg​


text [ duration pos x pos y rgba ]​


Посылает всем зрителям сообщение в виде HUD​


localmsg​


text [ duration pos x pos y rgba ]​


То же, что и msg, но видно только локальным зрителям​


servercmd​


string


Отсылает консольную команду на игровой сервер​


clientcmd​


group string


Отсылает команду всем клиентам группы: 1 = зрители, 2 = прокси, 3 = всем​


loopcmd​


id n string


Loopcmd запускает string каждые n секунд. <id> это число между 1 и 64, идентификатор конкретного loopcmd. loopcmd <id> none уберёт повторение команды.​


signoncommands​


string


Консольная команда, которая будет исполнена у зрителя после коннекта. Можно указать несколько команд, разделив их ;


maxclients​


n


Лимит зрителей на конкретно этом HLTV(по умолчанию 128)​


delay​


n


Задержка вещания длительностью n секунд на Master Proxy.
Значение по умолчанию равно 30 секундам. If the delay is set to a value below 10 seconds (e.g. 0), the auto director function will be disabled​


rate​


n


Пропускная способность канала между HLTV и игровым сервером HLDS.​


updaterate​


n


Число обновлений в секунду(кадров), посылаемых сервером на HLTV.​


maxrate​


n


Максимальная пропускная способность канала для зрителей.​


maxloss​


f


Максимальный уровень loss, по умолчанию равен 0.05 (5%). Если loss выше, то новым зрителям будет отказано в подключении.​


maxqueries​


n


Максимальное число запросов статуса от игрового браузера(server browser)​


dispatchmode​


0/1/2


Редирект зрителей с HLTV. 0 (Отключено) Клиенты никуда не редиректятся. 1 (Авто) Автоматически перенаправит зрителя на другой HLTV Proxy для сохранения баланса по нагрузке между всеми HLTV.2 (Всегда) Зритель будет перенаправлен на другой сервер в любом случае. Конкретно такой HLTV работает как распределитель зрителей.​


publicgame​


0/1


Виден ли IP сервера HLDS зрителям. 0 Приватный, не виден. 1 IP виден зрителям, так что они смогут присоединиться к игре.​


offlinetext​


string


Инфо в виде текста, виидмое клиентам, которые пытаются зайти на HLTV в то время как HLTV прекратил вещание.​


chatmode​


0/1/2


0 Зрители не могут использовать чат
1 Зрители могут использовать чат, но только в рамках своего прокси
2 Все зрители чатятся друг с другом (в этом случае Master и все Relay proxies должны установить chatmode 2).​


bannerfile​


file


Устанавливает файл с расширением TGA (RGBA) в качестве логотипа, который видят зрители​


ping​


host:port


Пингует сервер HLDS server на определённый порт. По умолчанию на 27015.​


nomaster​


0/1


0 Опция отключена. 1 HLTV Proxy не будет регистрироваться на мастер-серверах WON.​


forcemaster​


0/1


0 Опция отключена. 1 HLTV Proxy будет регистрироваться на мастер-серверах WON.​


heartbeat​


-​


Высылает данные о статусе на мастер-сервера WON.​


region​


n


Устанавливает регион, где располагается HLTV proxy​


rcon​


string


Удалённый контроль над другими серверами через консольные команды​


rconaddress​


IP:Port


Устанавливает сервер для удалённого контроля.​


rconpassword​


string


Устанавливает пароль rcon для удалённого хоста​


cheeringthreshold​


f


Number of cheering players must be above this threshold to play the cheering sound. (by default 0.25).​


blockvoice​


0/1


0 Отключено.1 Голосовой чат блокируется. Полезно если в игре есть официальные комментаторы. Тогда их не будут перебивать/заглушать.​


cmdlist​


-​


Показывает все возможные команды.​


logfile​


0/1


Выключить/включить логирование консоли в файл logfile<date>.log


status​


-​


Показывает статус HLTV.​


modules​


-​


Показывает все загруженные модули HLTV и их версии​


exec​


filename


Исполняет файл .cfg


echo​


string


Пишет текст в консоль HLTV​


developer​


0/1


0 Отключено. 1 Включает дополнительные сообщения отладки​


record​


filename


Записывает транслируемые игры в демки. Синтаксис названия filename-<date>-<map>.dem


stoprecording​


-​


Останавливает запись демок​


playdemo​


filename


Начинает проигрывать демку​

Консоль вызывается кнопкой TAB.
Все команды из файла hltv.cfg выполняются во время запуска HLTV.

Параметры командной строки(строки запуска)
INI:
-port <n>           // устанавливает порт HLTV proxy. По умолчанию "27020"
-ip <IP>             // HLTV будет использовать этот IP-адрес на хосте с несколькими IP
-nodns           // Запрещает имена DNS (полезно для LAN proxies)
-maxfps <n>         // устанавливает максимальный фпс(по умолчанию "100")
-highpriority    // запускает процесс HLTV с высоким приоритетом
-multicastttl <n>   // устанавливает время жизни для Multicast-пакетов, посылаемых HLTV Proxy.
-dev             // режим разработчика(developer mode)
Вышеуказанные параметры не могут быть изменены во время работы сервера HLTV, таким образом они не могут использоваться в файлах конфигурации. При этом любая консольная команда может использоваться в командной строке, если перед ней стоит знак [B]+[/B] . Например:
hltv.exe +connect localhost:27015 -port 27021


На сервере HLDS можно установить количество подключаемых проксей переменной sv_proxies `n` в файле server.cfg.
Если следует запретить HLTV proxies , то установите sv_proxies `0`. 1 позволит подключить 1 HLTV Proxy и.т.д.

Сборка из исходников
Windows:
gradlew --max-workers=1 clean rehlds/HLTV:build

Linux (ICC):
./gradlew --max-workers=1 clean rehlds/HLTV:build

Linux (GCC):
./gradlew --max-workers=1 -PuseGcc clean rehlds/HLTV:build

Собранные файлы будут находиться в каждом билде ReHLDS в папке rehlds/HLTV/**/binaries/


Документация HLTV. Располагается в README.md
Copyright © 2003, Valve LLC, All rights reserved.
Перевод Dev-CS.ru TEAM. При копировании материала активная ссылка обязательна.
Если заметите неточность - пожалуйста, сообщите нам.
 
Сообщения
496
Реакции
618
Помог
16 раз(а)
Перенесено в общий раздел.
 
Сообщения
287
Реакции
223
Помог
6 раз(а)
Очень полезная информация, интересная. Спасибо, будет что почитать перед сном
 
Сообщения
75
Реакции
66
Помог
1 раз(а)
Возможно не там пишу, но вопрос к разработчикам.
Есть ли возможность добавить в коробку автоматическую архивацию и сжатие демок? А так же переменную для вкл/откл.
HLTV конечно малоюзабельный, но архивация была бы очень полезная, дабы не подключать левых скриптов.
 
Сообщения
2,720
Реакции
2,997
Помог
60 раз(а)
автоматическую архивацию и сжатие демок
Для этого прийдётся в "стандартную dll" пихать функционал ещё одной целой либы, допустим Zlib. Быть может и годное предложение, но оно должно было писаться к предложениям для ReHLDS.

И на данный момент, лучше юзать какой-нибудь демон сторонний, как это все и делают. И, возможно Leshiy подскажет готовое решение.
 
Сообщения
474
Реакции
249
Помог
6 раз(а)
Пробегал глазами статью, заметил ошибку в описании offlinetext:
Инфо в виде текста, виидмое клиентам, которые пытаются зайти на HLTV в то время как HLTV прекратил вещание.
Описание serverpassword:
Устанавливает пароль на игровой сервер
В смысле? Здесь пишется пароль сервера, к которому коннектиццо HLTV. Если, конечно, сервер запаролен.
14 Ноя 2018
Из чего исходить, выбирая значения rate и updaterate для HLTV?
 
Сообщения
238
Реакции
38
Помог
5 раз(а)
hello, frends. Maybe someone knows how many hltv servers can be connected to one server?
I'm trying to connect the second one hltv server and i get this shit
Код:
 Automatic connection retry...
Challenging server ip:27015 (1/3).
Get challenge (HASHEDCDKEY)
Connecting to server ip :27015 (1/3).
Connection rejected: Proxy slots are full.
there is some config to make more Proxy slots at hlds server side or hltv server side ?

oh I think I found it
sv_proxies "number"
 
Последнее редактирование:

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу