这篇条目有关 Source引擎。如需详情,点击这里。

SourceTV

From Valve Developer Community
< Zh
Jump to navigation Jump to search
English (en)Polski (pl)中文 (zh)Translate (Translate)

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 控制台命令来更改这个端口号。

Network topology for direct SourceTV connections

这是一个很好的例子,但是只能用于观众较少的场合,因为一台服务器主机要为所有的玩家和所有的观众客户端服务。对于大量的观众,这会很快耗尽这台机器上可用的CPU/带宽。因此,有必要在多台主机上分配所需的带宽和CPU,以此可以满足大量观众的需求。通过设置其他的 SourceTV 服务器连接到 SourceTV 主服务器,中继其游戏转播来完成完成。那些服务器称为 SourceTV 中继代理,每台代理都可以为255个观众服务。SourceTV 代理也可以连接到其他 SourceTV 代理,可以建立一个无限大的中继节点网络。

Network topology for relayed SourceTV connections.

要设置一个 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(en),HldsUpdateTool 下载到的过期旧文件将不在可用,欲下载最新的 srcds,应使用 SteamCMD(en)。)

在安装过程完成后,按照 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 只能服务一个客户端,并且无法作为中继代理使用。

参阅