SourceTV
SourceTV 提供的一种能力,可以让无限多的观众观看基于 Source 引擎的在线游戏。SourceTV 的观众对于游戏中的玩家是不可见的,而且也无法和游戏中的玩家互动。SourceTV 的观看视角是由人工或 AI 自动控制的。转播通常有一定量的延迟。这确保了游戏中的队伍无法使用 SourceTV 来获取任何关于对手的有用信息。SourceTV 也可以录制服务器端的 demo,这些 demo 包含了游戏中所有的实体和事件。
为几个观众提供一个 SourceTV 广播服务是一个简单的任务,只需要在游戏服务器上做一点更改。为上千个观众安装一个大型的 SourceTV 网络则需要更多的时间来准备,以及更多带宽、CPU和内存。
观看游戏
要通过 SourceTV 观看一个游戏,启动 Steam,然后从 Steam 菜单中选择服务器(Servers)来打开服务器浏览器。选择 观看(Spectate) 标签。可以通过点击更改过滤器(Change filters)然后选择一个指定的游戏来缩减列表。等列表更新之后,在列表中双击你想要观看的服务器,然后你就会连接上去。
如果某个游戏组织宣告了有什么比赛会在 SourceTV 上转播的话,他们通常会提供他们的 SourceTV 服务器的IP地址(IP:Port
)。相对于通过服务器列表来搜索它们,你可以直接到收藏夹(Favorites)标签,然后通过右击选择添加服务器IP地址(Add server by IP address)来添加 SourceTV 到你的服务器列表。另外,你可以打开 Source 的控制台窗口,然后使用 connect
命令来观看某些游戏。例如:
connect 192.168.130.42:27020
默认的 SourceTV 的端口是 27020,但也可能被更改了。一般应该会包括在所给的 SourceTV 的 IP 地址里,因为通常情况下,这个端口和游戏服务器默认端口 27015 是不同的。
当观众通过 SourceTV 观看转播的话,摄像机的位置和摄像机模式是由自动导航或者摄影师选择的。观众无法切换观看者模式或者跟随玩家,这些功能在 HLTV 里可以,但现在移除了这些功能,以减少网络带宽的占用。在回放 SourceTV 的 demo 时,依然允许切换模式以及使用自由视角。
转播游戏
SourceTV 现在完全集成到 Source 引擎,而不再像以前一个单独的工具 HLTV。要开始转播游戏,游戏服务器必须在地图载入之前启用 SourceTV 的 tv_enable 1
。那会创建一个 SourceTV 服务器实例,可以在游戏中看到一个机器人加入观看者队伍。SourceTV 运行在游戏服务器进程中,称为 SourceTV 主服务器。SourceTV 主服务器会缓冲所有游戏数据、事件,经过一定的延迟时间之后广播出去,以此来防止作弊。自动导航是一个 MOD 的特定模块,它会根据有趣的游戏事件选择摄像机模式和位置(如玩家被杀、炸弹爆炸等)。另外,一个人类观众也可以变成一个摄影师,他的视角会覆盖掉自动导航的视角。SourceTV 观众连接到跟游戏服务器相同的 IP 地址,但使用不同的端口,比如 SourceTV 使用27020。可以使用 tv_port
控制台命令来更改这个端口号。
这是一个很好的例子,但是只能用于观众较少的场合,因为一台服务器主机要为所有的玩家和所有的观众客户端服务。对于大量的观众,这会很快耗尽这台机器上可用的CPU/带宽。因此,有必要在多台主机上分配所需的带宽和CPU,以此可以满足大量观众的需求。通过设置其他的 SourceTV 服务器连接到 SourceTV 主服务器,中继其游戏转播来完成完成。那些服务器称为 SourceTV 中继代理,每台代理都可以为255个观众服务。SourceTV 代理也可以连接到其他 SourceTV 代理,可以建立一个无限大的中继节点网络。
要设置一个 SourceTV 中继代理,启动一个 Source 专用服务器(Dedicated Server)进程,并且不要运行地图。tv_relay
命令连接中继代理到其他 SourceTV 服务器/代理。这里有一个例子关于如何创建一个 SourceTV 中继。
srcds.exe -game cstrike -console +tv_relay 127.0.0.2:27020
随时都可以在你的本地代理上使用 tv_status
命令来查看状态。这里是一些输出的例子:
--- SourceTV Status --- Online 05:08, FPS 253.8, Version 2841 (Win32) Master "SourceTV", delay 30 Game Time 05:01, Mod "cstrike", Map "de_dust", Players 7 Local IP 255.255.179.38:27020, KB/sec In 0.0, Out 0.0 Local Slots 128, Spectators 8, Proxies 0 Total Slots 128, Spectators 0, Proxies 0
总计位(Total Slots)以及观看者数字是指所有已连接的中继代理的人数的总和。如果某个中继代理丢失了和其服务器的连接,你可以使用 tv_retry
来快速重新连接。要停止转播并断开所有的客户端,执行 tv_stop
。
摄影师
SourceTV 的摄像机视角一般是由自动导航模块控制的。也可以是一个加入了游戏服务器观看者队伍的玩家,他们可以通过按使用键来变成摄影师(通常是 'E')。这会将他的视角作为摄像机视角呈现给所有观众。摄影师可以选择任何观看者模式(第一人称、自由视角等),切换到任何玩家或者自由地移动。摄影师可以通过再次按使用建来关闭摄像机,之后自动导航会再次接管。摄影师应该在实际直播之前,拥有较好的关于基础游戏性的知识,练习摄像机的移动。一个死了的、在观看者模式的玩家无法变成摄影师。
录制游戏
SourceTV 主服务器可以在无任何数据损失和网络延迟的前提下录制游戏。所有的事件和实体都会被录制,而且 demo 文件可以像平常一样在客户端上回放(使用 demoui
来回放)。要开始录制一个 demo 文件,必须在载入地图之前启用 SourceTV,然后执行 tv_record demoname
。demo 将会在下次更换地图的时候停止录制,或者使用 tv_stoprecord
来停止录制。要在每局游戏都自动录制,你可以设置 tv_autorecord 1
。自动录制的 demo 文件会命名为地图名+录制开始的日期/时间的形式(auto-YYYYMMDD-hhmm-map.dem
)。SourceTV 的观众也可以使用一般的 record
命令来录制游戏,但在正常的客户端录制 demo 上,你不能在播放时更改追踪的玩家或者观看模式。
有些时候你可能只是想使用 SourceTV 来录制 demo 而不是转播。你可以通过设置最大客户端数量为零 (tv_maxclients 0
)来禁用转播。要确保启用你的服务器上的自动录制,在你的 autoexec.cfg
中添加这几行:
tv_enable 1 tv_autorecord 1 tv_maxclients 0
如何做...
- 不使用 Steam 运行一个 Win32 中继代理:使用 HldsUpdateTool 下载并安装 Windows 专用服务器(srcds.exe),你可以在这里下载。
(译注:Source 引擎的游戏开始全面迁移到 SteamPipe ,HldsUpdateTool 下载到的过期旧文件将不在可用,欲下载最新的 srcds,应使用 SteamCMD 。)
在安装过程完成后,按照 hldsupdatetool_readme.txt 文件里的步骤来升级服务器端。这也许需要花费很多磁盘空间,但是如果你只是运行 SourceTV 中继代理的话,你可以删除所有模型、地图、材质以及声音文件。现在你可以在没有运行 Steam 的情况下启动 srcds.exe 了。
- 远程控制一个中继代理:SourceTV 中继代理支持像正常的 SRCDS 游戏服务器一样的远程控制命令(RCON)。使用 "rcon_address <ip
- port>" 和 "rcon_password <password>" 来访问你的目标主机,并使用 "rcon <command>" 来发出命令,比如 "rcon tv_status"。请注意:RCON TCP 端口是服务器的默认端口(通常是27015),不是 SourceTV 的端口。
控制台命令
- tv_enable <0|1>
- 在本地游戏服务器上启用 SourceTV,在下次更换地图之后 SourceTV 机器人会出现在观察者的位置(仅限主服务器)。
- tv_name <name>
- 设置 SourceTV 显示在服务器浏览器和分数板的名字。
- tv_title <text>
- 设置显示在观众GUI的 SourceTV 转播标题
- tv_maxclients <0..255>
- 设置本地 SourceTV 服务器/代理的最大客户端数量(默认128)。
- tv_stop
- 停止通过 SourceTV 转播游戏。
- tv_status
- 显示 SourceTV 特定的信息。
- tv_clients
- 显示一个所有连接到本地 SourceTV 服务器的观众客户端的列表。
- tv_msg <text>
- 发送一个 HUD 信息给所有已连接到 SourceTV 的观众客户端。
- tv_retry
- 重新连接 SourceTV 中继代理到最后一个已知的地址(仅限中继)。
- tv_autoretry <0|1>
- 如果启用,SourceTV 在丢失连接后会尝试重新连接到最后一个已知的服务器。
- tv_timeout <seconds>
- 设置 SourceTV 中继代理连接超时时间(秒)。如果一个连接超时,中继代理会自动尝试重新连接。
- tv_delay <seconds>
- Source TV 转播延迟时间(秒)(仅限主服务器)。
- tv_delaymapchange <0|1>
在游戏服务器上延迟换图直到剩余的缓冲数据广播出去。
- tv_port <port>
- 设置 SourceTV 主机端口(默认27020)。必须设置在 srcds 的启动参数中。
- tv_maxrate <bytes>
- 设置每个客户端最大的带宽速度(字节/秒)(默认5000)
- tv_snapshotrate <n>
- 设置 SourceTV 每秒的世界快照广播(仅限主服务器)。
- tv_password <password>
- 设置观众连接时需要的密码。
- tv_relaypassword <password>
- 设置中继代理连接时需要的密码。代理连接时只需要使用 "password <password>" 来连接到设置好的 tv_relaypassword。
- tv_relay <IP>
- 连接一个中继服务器到另一个 SourceTV 服务器/中继
- tv_record <filename>
- 启动一个 SourceTV demo 录制,并且录制所有实体和事件(仅限主服务器)
- tv_stoprecord
- 停止 SourceTV demo 录制(仅限主服务器)
- tv_autorecord <0|1>
- 自动录制每场游戏,demo 文件名自动命名为 - YYYYMMDD-hhmm-map.dem
- tv_debug <0|1>
- 显示额外的调试信息
- tv_dispatchmode <0|1|2>
- 设置连接时的 Source 调遣模式:0=从不,1=如果合适,2=一直
- tv_overrideroot <0|1>
- 用本地 IP 覆盖掉主服务器 IP 转播给观众。
- tv_relayvoice <0|1>
- 如果启用,允许用户在转播时语音聊天
- tv_transmitall <0|1>
- 默认情况下,在自动导航视角之外的实体和事件将不会转播出去以此来节省带宽。如果 tv_transmitall 启用了,整个游戏都会传输转播,观众可以切换他们的视角到任何他们想要的玩家。这个选项会提高每个观众的带宽需求,每个观众提高 2 或 3 个因子。
- tv_chattimelimit <seconds>
- 限制观众只能每隔 n 秒才能聊天
- tv_chatgroupsize <n>
- 设置聊天群大小。只有在同一聊天群的观众可以互相说话。聊天群可以用 "tv_chatgroupsize 0" 来关闭,所有人都可以跟其他所有人说话。设置聊天群可以帮助减少喋喋不休的噪音,以及节省一些带宽。
- tv_chatgroup <name>
- 允许观众选择他们的聊天群如果不给出名字,会显示当前的聊天群(仅限客户端)
- tv_nochat <0|1>
- 屏蔽其他观众的聊天(仅限客户端)
- tv_allow_static_shots <0|1>
- 允许自动导航选择固定的摄像机位(仅限主服务器)
- tv_allow_camera_man <0|1>
- 允许在游戏服务器的观看者变成一个摄影师(仅限主服务器)
命令行参数
这些命令行设置无法通过控制台或 rcon
执行。如果你想限制出租的服务器的 SourceTV 功能的话,他们很有用。
- -nohltv
- -tvdisable
- 禁用该游戏服务器上所有 SourceTV 功能。
- -tvmasteronly
- SourceTV 只能服务一个客户端,并且无法作为中继代理使用。