Choose your operating system:
Windows
macOS
Linux
Oodle网络
公开了一个可用于网络流送的压缩系统。与其他Oodle解决方案相比,将其集成到你的项目中需要更多的操作,需要数据包捕获、需要你熟悉
BaseEngine.ini
以及需要进行压缩器的离线"训练"。它将使用离线训练步骤大幅缩短压缩时间。
设置Oodle网络
以下是使用Oodle网络所需步骤的摘要:
-
确认Ooodle网络插件已启用。
-
使用尽可能真实的数据捕获在线Gameplay的数据包数据。
-
训练压缩器,创建在运行时使用的字典文件。
-
配置Oodle网络以便使用这些文件。
-
确保这些文件与你的游戏一起打包。
以下小节提供了有关这些步骤的更多信息。
启用Oodle网络
插件本身应该默认启用,你应该会在启动日志中看到说明:
LogPluginManager: Mounting plugin OodleNetwork
但是,你需要告诉虚幻引擎在处理网络流送时要使用此插件。为此,你需要在四个位置编辑
BaseEngine.ini
文件:
[GameNetDriver PacketHandlerProfileConfig]
+Components=OodleNetworkHandlerComponent
[PendingNetDriver PacketHandlerProfileConfig]
+Components=OodleNetworkHandlerComponent
[DemoNetDriver PacketHandlerProfileConfig]
+Components=OodleNetworkHandlerComponent
[PacketHandlerComponents]
Components=OodleNetworkHandlerComponent
这些变量将使虚幻引擎将Oodle网络用于网络流送。前三个条目将指定相关网络驱动程序的组件。如果没有为给定的网络驱动程序指定组件,则虚幻引擎会检查
PacketHandlerComponents
分段。
调试时,你可能需要连接实际客户端,以便进行代码级调试,因为数据包处理程序仅在活动连接上创建。
此外,Oodle网络将查找以下
BaseEngine.ini
文件块进行配置:
[OodleNetworkHandlerComponent]
bEnableOodle=true
PacketLogFile=PacketDump
ServerDictionary=
ClientDictionary=
ServerEnableMode=AlwaysEnabled
ClientEnableMode=AlwaysEnabled
设置 |
说明 |
---|---|
bEnableOodle |
当设置为false时,Oodle不会压缩数据。 |
PacketLogFile |
这定义了在 捕获数据包数据 时要写出的文件名的前缀。 |
ServerDictionary |
训练 步骤创建的服务器端字典文件的路径。打包游戏时需要包含此文件。 |
ClientDictionary |
训练 步骤创建的客户端字典文件的路径。打包游戏时需要包含此文件。 |
ServerEnableMode |
为某些内存受限的平台提供一种有条件地禁用压缩的方法。 选项:
|
ClientEnableMode |
为某些内存受限的平台提供一种有条件地禁用压缩的方法。 选项:
|
捕获数据包数据
通过在特殊模式下启用Oodle网络玩游戏来完成数据包捕获。此播放应该代表典型播放,因为这些数据包捕获的质量会影响你得到的压缩质量。
无论哪个可执行文件充当服务器,都应该使用
-OodleCapturing
运行:
UE4Editor.exe ShooterGame -game **-OodleCapturing** -windowed -log
客户端应该在没有
-OoodleCapturing
的情况下连接:
UE4Editor.exe ShooterGame -game -windowed -log
数据包捕获会写入用于项目和配置的
Saved/Oodle
目录。你需要收集许多数据包捕获(50 Mb或更多)以便创建具有适当代表性的训练数据集。训练时要使用目录中的所有数据包捕获。
训练
Oodle网络训练器是命令行程序,可以读取所有数据包捕获并从中创建字典。这些字典用于压缩服务器和客户端之间的网络流送。
这是运行训练器命令行程序的命令:
UE4Editor.exe ShooterGame -run=OodleNetworkTrainerCommandlet AutoGenerateDictionaries -CompressionTest
字典默认大小为4MB,可以使用
-DictionarySize=(size in bytes)
命令行选项覆盖。
训练器从Oodle网络写入数据包的同一目录读取数据包捕获,并将结果字典写入
Content/Oodle
目录:
Content/Oodle/ShooterGameInput.udic
Content/Oodle/ShooterGameOutput.udic
日志将报告使用生成的字典实现的压缩率:
OodleNetworkHandlerComponentLog: 压缩测试结果:
OodleNetworkHandlerComponentLog: - CompressionTestPackets: 380,大小:10428 (~0MB)
OodleNetworkHandlerComponentLog: - 未压缩:10428 (~0MB),已压缩:6699 (~0MB)
OodleNetworkHandlerComponentLog: - 总保存量:35.759495
此时,训练完成。
如果你的游戏以明显的方式更改补丁,你需要重新训练Oodle网络捕获新的数据包,并发布带有补丁的新词典。
配置
服务器端和客户端字典应该在
BaseEngine.ini
文件中指定:
ServerDictionary=Content/Oodle/ShooterGameOutput.udic
ClientDictionary=Content/Oodle/ShooterGameInput.udic
配置完成后,你应该能够使用
stat OodleNetwork
命令,并查看启用统计数据的游戏中的实时压缩率。
打包
只要为你的目标平台启用了Oodle网络,字典文件就应该会自动包含在内。你可以通过列出pak文件的内容并搜索相关条目来确认:
UnrealPak.exe Path\To\ShooterGame\Saved\StagedBuilds\WindowsNoEditor\ShooterGame\Content\Paks\ShooterGame-WindowsNoEditor.pak -list
...
LogPakFile: Display: "ShooterGame/Content/Maps/ShooterEntry_BuiltData.uasset" offset: 326025216, size: 735 bytes, sha1: BF611DF661BA7260E086145D328AC09E9E1149FB, compression: None.
LogPakFile: Display: "ShooterGame/Content/Maps/ShooterEntry_BuiltData.uexp" offset: 326026004, size: 286 bytes, sha1: 44DB46D2C5EC43395C2659E97D4B94DCE0064E6A, compression: Oodle.
LogPakFile: Display: "ShooterGame/Content/Oodle/ShooterGameInput.udic" offset: 326027264, size: 46416 bytes, sha1: 95EE01894C1E72CD12105652186515573E42C3FE, compression: Oodle.
LogPakFile: Display: "ShooterGame/Content/Oodle/ShooterGameOutput.udic" offset: 326074368, size: 24339 bytes, sha1: EE0602B1263815475FE75BA5D953D7A7963CAF71, compression: Oodle.
LogPakFile: Display: "ShooterGame/Content/ShaderArchive-Global-PCD3D_SM5.ushaderbytecode" offset: 326100992, size: 5427343 bytes, sha1: 129EED3E7BB14E54ACEB72F4A5D813CD1F8E5FA6, compression: None.
...
如果你在检索加密密钥时遇到错误,请尝试为此测试使用
-skipencryption
打包。