浙江博硕数据真诚为您服务 http://www.85bs.com

这篇文章是最新发布的HLDS 4.1.1.1/3.1.1.1中的HLTV的自诉文章翻译而来,对简单的HLTV架设和大规模HLTV NET的架设都有详细地介绍。HLTV独特的实时转播方式注定它将会在电子竞技的发展道路上的重要地位,这一点也在世界各国的CS比赛,以及国内的几次大规模CS大赛,浩方平台的几次转播中得以体现。HLTV随着HLDS 4.1.1.1/3.1.1.1的发布也变得更加成熟,困扰大家两年多的闪光弹bug也已经修复,但是国内很多服务器管理员和比赛组织者都不是很了解HLTV的用法或者只是了解最近本的用法,很多很有趣的功能没有实现,基于此,将这篇很详细的README文章介绍给大家。

  文章中一些不常用的命令可能会有一些翻译上的错误,欢迎大家指出,谢谢。


1、总览
Half-Lift TV提供了理论上无限制观察者观看在线游戏的可能。他们可以在游戏服务器中跟随任一名玩家的视角。观察者对于游戏者来说是不可见的,也不能以任何方式干扰进行中的游戏。每个观察者可以选择任意玩家的任意视角。为了获得更有趣的观察体验,观察者可以打开自动切换模式,这样镜头将自动切换到以合适的角度来观看精彩的镜头。这样观察者们就能舒服的靠在椅背上不用作任何动作。观察者们还可以用最基本的HL Chat模式来互相沟通。
大多数流行的Half-Life的MOD例如CS,Team Fortress Classic,DOD都支持HLTV,HLTV的提供者拥有对HLTV系统的完全控制权,可以改变观察者人数,添加文字信息,更换HLTV logo等等。播放的画面可以自定义一个延迟时间,默认的是30秒,这样可以确保正在比赛的队伍不可能通过HLTV来得到一些有用的对手信息。建立一个单独的支持100人的HLTV Server是很简单的事情,不需要对默认设置作任何改变。
架设一个庞大的HLTV网络来支持上千人的观看需要为服务器的配置等等准备多一些的时间和经验。

2、观看游戏
为了观看一个HLTV,启动Half-Life(或其他MOD包),进入多人模式,然后进入HLTV提供者提供给你的IP:port,或者直接在控制台输入(假设服务器为192.168.0.1:27020)

connect 192.168.0.1:27020

这样的命令,即可进入HLTV服务器观看比赛。
默认的HLTV端口是27020,但是这是可以更改的,通常会包括在给出的IP地址中提供。
你可以用不同的模式来观看游戏:跟随视角,第一人称视角,自由观察,地图总览,地图跟随。最简单的切换视角方法是按“跳跃”键(默认是空格键),另外一种方法是使用按“蹲下”键(默认是Ctrl)激活的观察菜单,在那儿你可以定义自己的观察风格并且开启自动切换模式。循环按下“使用”(默认是E)可以开关画中画模式。

下列HL控制台命令可以在用来自定义观察模式:

spec_autodirector <0|1> - 开启或者关闭自动切换模式
spec_drawcone <0|1> - 在地图总览模式显示你的视角范围
spec_drawnames <0|1> - 在玩家标志下显示玩家的名字
spec_drawstatus <0|1> - 显示游戏信息(时间,地图名称等)
spec_pip <0|1> - 开关画中画功能
spec_menu - 开启观察者菜单
spec_help - 显示帮助屏幕
spec_mode <1-6> [<0-4>] - 设置主显示模式,第二个参数是设置画中画模式。并非所有的组合都有效。
主显示模式:
1、锁定跟随 2、自由跟随
3、自由观察 4、第一人称视角
5、地图总览 6、地图锁定跟随
画中画模式:
0、关闭画中画 1、自由跟随
2、第一人称视角 3、地图总览
4、地图跟随
以上命令中 <>,()包括的为必填项,[]包括的为可选项,下同。

3、基本HLTV架设
HLTV广播系统的核心是HLTV服务器,也称之为HLTV代理。HLTV在控制台窗口运行,类似于HL的专业服务器。为了转播一台指定服务器上的比赛,HLTV代理像一个普通玩家一样连入这台服务器,然后观察者们连入这台HLTV代理,这样游戏数据流就通过HLTV代理转发到所有的观察者客户端。下面这个图示就是一个基本的HLTV配置:

HL Game Server --> HLTV 代理 -->观察者

HLTV代理可以支持的客户端人数取决于服务器的硬件配置和网络条件,理论上来说,一个单独的HLTV可以支持最多255个观察者,但是请注意,平均每个支持了100个观察者的HLTV代理需要2M的带宽才能流畅收看,如果需要支持更多的观察者,网络负荷必须被分部到多HLTV代理上去。
第一个连接到游戏服务器上的HLTV服务器被称为主服务器,在上面可以进行游戏数据流的延时和发包率等综合广播的设置,其他的HLTV代理连入到这台主服务器上作为接替。这样的连接数量和方式是不受限制的,可以串联也可以并连。重要的是他们不要处于同一个网络中,这样才能确保带宽被均衡使用。

                   --> HLTV 转播服务器 1 --> 观察者
  HL Game Server --> HLTV 主服务器 --> HLTV 转播服务器 2 --> 观察者
                   --> HLTV 转播服务器 3 --> 观察者

4、游戏比赛转播
让我们来看一下最普通的设置,一台HLTV代理在局域网环境中。这是最普通的情况,默认的HLTV设置不需要作任何改动。选择一台专用计算机作为里的HLTV代理并且安装Half-Life专业服务器版软件,它包含了所有的HLTV代理文件。这并不需要你的计算机上安装有Half-Life这个游戏。
启动HLTV应用程序(带有小照相机的HL的小图标)就能看到HLTV的控制台窗口,显示了一些初始化信息后(如果初始化进行了很长时间,可能是HLTV不能解析出一些IP地址,那么请在HLTV启动命令行增加 "-nodns"参数来跳过),控制台就可以接受你的命令了,下面我们用">"来代表命令行提示符,记住你只需要输入">"后面的字符就可以了。首先给你的HLTV代理起一个独特的名字:

>name "My HLTV Proxy"

我们假定你的HLTV Proxy的IP为192.168.0.2,你想观察在192.168.0.3:27015上的游戏,那么键入以下的命令使HLTV代理连入:

>connect 192.168.0.3:27015

过了一会儿HLTV完全连入服务器并且准备提供观察者服务时,用"status"命令可以检查HLTV代理的连接状态:

>status

--- HLTV Status ---
Local IP 192.168.1.2:27020, FPS 72.8, Network In 0.8 Out 0.9
Local Slots 128, Spectators 0, Proxies 0
Source: Server "Half-Life" (192.168.1.3:27015)
Total Slots 128, Spectators 0, Proxies 1
Time 01:02, Game "valve", Map "maps/frenzy.bsp", Players 1

"status"命令可以显示你的IP、每秒刷新的HLTV系统的进出流量、你的HLTV代理提供的观察者数量,这台游戏服务器中所有HLTV广播系统的观察者数量。游戏源可以是游戏服务器,也可以使另一台HLTV代理,甚至一个Demo文件。

5、录制HLTV Demos
HLTV demo文件和普通的Half-Life游戏录像差不多,但是你可以选择任意的视角和视点以及跟随的玩家。回放一个HLTV demo的时候并不需要HLTV服务器,只要启动Half-Life并且在控制台输入" playdemo (demo name)"或者"viewdemo (demoname)"就可以了。录制一个HLTV demo,需要将HLTV代理连入游戏server,并且在控制台输入:

>record (name)

发出这一命令后,所有的游戏数据将被录制下来,demo文件会放在当前的Mod目录下,例如 \cstrike。所有的demo文件将被默认指定为如下格式的文件名:<名称>-<时间>-<地图>.dem,demo文件也记录了一些发往观察者的数据,这意味着,demo文件记录了和观察者同步的游戏信息。

停止录制的命令是"stoprecord"。

有的时候只需要录制HLTV的demo而并不想进行广播的话,可以增加这样一些命令:

>maxclients 0 //不允许观察者客户端
>delay 10 //最低的延迟设置
>rate 10000 //最高的数据速率
>updaterate 20 //基本上行输率
>nomaster 1 //不在master服务器注册

注://后是命令注释,在平常使用中不需要输入

6、大规模广播
建立一个可以支持大规模观察者(>1000人)的HLTV网络是一个艰难且耗时的工作。下列指导将帮助你配置和运行以这样的一个HLTV网络。一条重要的规则是:“要质量,不是只要数量”。相对于使用所有的带宽来说,建立少一点观察者的选择显然更好,这样所有的观察者都不会为lags和超时所困扰。检查你的带宽容量并且计算出你的HLTV服务器能支持多少观察者,平均每个观察者需要2-3K的流量,CPU和内存在目前流行的PC系统中到是不太会成为性能瓶颈。

这个列表给出大致的Internet连接HLTV所需要带宽:
- ISDN 64Kbps : 2个观察者
- ADSL 512Kbps(上行速率) : 20个观察者
- T1 1.5Mbps : 75个观察者
- LAN 10Mbps : 500个观察者
- T3 75Mbps : 4000个观察者

使用"maxclients"命令可以控制HLTV服务器接受的客户端连入数量,确定"maxrate"参数被设为一个合理的数值,例如:3500 kB/sec。更低的数值也是可能的,但是会造成观察者们产生"choke"。命令"maxrate"并不影响HLTV代理服务器之间的带宽限制,仅对观察者客户端有效。为了降低带宽需求,你可以关闭internet HLTV chat("chatmode 0")或者将游戏的上行速率从默认的20降低到10("updaterate 10")。低一些的上行速率可以节省25%的带宽并且这是可接受的,因为在这时,观察这并不需要和真实玩家相同的上行速率。

一个针对大规模广播非常普遍的设置是使用两台分离的HLTV服务器来创建一个私有段和一个公共段。我们假定游戏服务器在一个封闭的局域网中外网无法到达。这确保了最大的安全无法被外界攻击(例如D.O.S攻击)。HLTV主服务器在局域网中启动,并且它的外网地址保密。第二台拥有真实IP地址的HLTV服务器在局域网外启动并且连入HLTV主服务器。这第二台HLTV服务器是公众HLTV发布机,IP和端口公开给观众们,并且所有的转播服务器都连入这台HLTV发布机。这样HLTV主服务器就在安全的局域网环境下工作,并且可以被用来录制demo或者现场放映机。观察者们连入HLTV发布机或者其他转播服务器。这样所有的网络负载就被均衡到了所有的HLTV代理上。
如图:

  +---- Private LAN -----+ +------ Public Internet --------+
                         -> HLTV Proxy 1
  HL Server -> HLTV主服务器 -> HLTV发布服务器 -> HLTV Proxy 2
                         -> HLTV Proxy 3

主服务器和发布服务器的配置文件不同:

master.cfg
nomaster 1 //不在WON主服务器上注册
proxypassword MyPWD //保护密码
publicgame 0 //不显示游戏服务器IP
dispatchmode 0 //不分派观察者

dispatcher.cfg
forcemaster 1 //注册到WON主服务器上
publicgame 0 //不显示游戏服务器IP
dispatchmode 2 //分派所有客户端到其他服务器
hostname MyGame //公开的HLTV服务器名称

如果你在运行3个或者更多的HLTV服务器,一个很好的方案是通过服务器管理工具来使用RCON命令管理他们。在HLTV服务器上开启RCON的方法是设置"adminpassword"选项。同时"proxypassword"可以确保只有经过你授权的HLTV提供者才可以连入你的HLTV网络。否则任何人都可以使用缓慢的HLTV代理连入你的网络打乱你的整个网络的负载均衡。

7、HLTV设置

一个简单的的控制台命令语法:命令将被描述为以下形式:

command (parameter) [(parameter)] - description

一条命令或许会有一个或者多个参数。[]中的参数为可选项,一般来说参数包括:

 (string) : 文字,如果文字中包含空格则必须被引号包括例如 "My Name"
 (n) : 任意整数,例如:42
 (f) : 任意浮点数,例如:4.2
 (IP:Port) : IP地址,例如:192.168.0.1:27020
 (a|b|c) : 可选择的选项,或者a或者b或者c

注意;所有的<,>,(,),|,[,]这样的字符是不包含在最终输入在控制台上的命令中的。大多数命令符合布尔代数开关,即1表示打开,0表示关闭。

connect (IP:Port) - 连接HLTV代理到游戏服务器(默认port为27015)
disconnect - 从服务端口断开,但是不停止广播,所有的观察者仍然保持连接状态
stop - 断开连接,同时停止广播
quit - 退出HLTV程序
retry - 重试最后一次服务器连接
autoretry <0|1> - 如果开启,HLTV因为任何理由的断开后将自动重新连接服务器
name (text) - 设置HLTV代理计分版上的名称
hostname (text) - 设置HLTV服务器在服务器列表中的名称
serverpassword (text) - 设置游戏服务器连接密码,连入需要密码的服务器时使用
adminpassword (text) - 设置RCON管理员和评论员密码
proxypassword (text) - 设置其他HLTV连入的密码
spectatorpassword (text) -设置观察者密码,对其他HLTV服务器也有效
clients - 列出已经连接的观察者
proxies - 列出已经连接的其他HLTV服务器
players - 列出游戏服务器中的玩家
kick (ID) - 踢出指定名字的观察者
bann (IP) - 禁止IP连接
say (text) - 向游戏服务器发送文本信息
msg (text) [(duration) (pos x) (pos y) (color hex rgba)] - 向所有的观察者发送大屏幕信息
localmsg (text) [(duration) (pos x) (pos y) (color hex rgba)] -和msg相同,但是只对本服务器上观察者发送
servercmd (string) - 转发命令给游戏服务器
clientcmd (group) (string) - 发送控制台命令给所有指定群组的客户端:1=观察者 2=其他HLTV服务器 3=所有
loopcmd (id) (n) (string) - 这一命令将每(n)秒执行(string)中的命令。(id)取1到64中的数字来认定这条loopcmd,"loopcmd (id) none"

将取消正在循环的命令。loopcmd不带任何参数将列出正在循环的命令。
signoncommands (string) - 本地观察者连接后将被执行的控制台命令,多条命令可以用分号来分隔。
maxclients (n) - 设置本服务器的观察者数量上限(默认为128)
delay (n) - 从主HLTV上接受的游戏数据流延迟时间,默认是30秒来消除作弊的可能,最低为10秒。
rate (n) - 游戏服务器发送到HLTV的带宽速率
updaterate (n) - 从游戏服务器发送到HLTV的游戏上行速率
maxrate (n) - 观察者可用的最大带宽速率
maxqueries (n) - 服务器列表每秒得到的服务器信息数量
dispatchmode (0|1|2) - 模式1(Auto)将会把连接负载自动均衡到其他HLTV服务器,模式2(Always)将会把所有连接转发到其他HLTV服务器,这样本台HLTV服务器就成了转发机,模式0(OFF)将不会转发任何连接。
publicgame <0|1> - 如果public为1,游戏服务器的IP将能被观察者看到,并且可以使用"joingame"命令进入游戏服务器。
offlinetext (string) - 如果HLTV没有继续转播,观察者被拒绝的时候将看到的文字信息。
chatmode <0|1|2> - 如果chatmode为0,观察者不能聊天,如果是1,连入同一台服务器的观察者可以看到彼此之间的信息,如果是2,整个HLTV NET中所有的观察者将能互相聊天。
bannerfile (file) - 指定一个TGA文件作为观察者界面的LOGO。
ping (host:port) - ping一个HL服务器
nomaster <0|1> - 是否在主WON服务器注册
forcemaster <0|1> - 是否强迫在主WON服务器注册
heartbeat - 手动发送状态信息给WON服务器
rcon (string) - 发送远程命令给其他服务器
rconaddress (IP:PORT) - 设定远程控制目标服务器
rconpassword (string) - 验证远程控制目标服务器的密码
cheeringthreshold (f) - number of cheering players must be above this threshold to play the cheering sound (by default 0.25).
blockvoice <0|1> - 是否过滤所有的语音数据。
cmdlist - 列出所有命令
logfile <0|1> - 开启或关闭控制台log文件"logfile(date).log"
status - 显示服务器信息
modules - 显示所有加载的HLTV模块和版本
exec (filename) - 执行一个.cfg文件
echo (string) - 向HLTV控制台先是一条文本
developer <0|1> - 开发者模式将显示更多的除错信息
record (filename) - 录制demo
stoprecord - 停止录制demo
playdemo (filename) - 广播一个demo文件


控制台命令通过按"TAB"可以自动完成,所有的命令都可以放在hltv.cfg文件中,每次启动时自动执行。

一些参数只能在命令行启动
-port (n) - 指定HLTV端口,默认为27020
-ip (IP) - 在有多IP的主机上强制使用某个IP
-comm (filename) - 设置一个master server信息文件取代woncomm.lst
-nodns - 禁用DNS解析
-maxfps (n) - 设置最大系统刷新率,默认为100
-cachesize (n) - 设置帧缓存大小,默认为32
-highpriority - 以高优先权启动HLTV程序(仅在win32系统可用)
-steam - 服务器支持特殊流模式
-dev - 开发者模式

上述参数在运行时不可更改,但是他们可以在config文件中指定。
所有的控制台命令也可在命令行中使用,注意在前面加上"+"
例如:

hltv.exe +connect localhost:27015 -port 27021

Half-Life服务器可以设置sv_proxies (n)来确定允许多少HLTV服务器连入,如果禁止HLTV连入,可以设为0,设为1意味着允许主HLTV连入。