我们已注意到 Google 披露的 WebRTC 版本中存在的漏洞(更多信息请参见此处),并正在调查它对 EOS SDK 的影响以及接下来应采取的措施。
本文将介绍像素流系统各个部分公开的选项、设置和命令行参数。
支持的图形硬件
要运行带有像素流插件的虚幻引擎应用程序,计算机必须具有以下类型的图形硬件之一:
-
支持硬件加速视频编码(NVENC)的NVIDIA GPU硬件。请参阅NVIDIA的支持设备对照表。
-
支持高级媒体框架(AMF)的AMD GPU硬件。
-
支持使用VideoToolbox框架的Macintosh硬件。
如果你在尝试使用像素流插件时,收到错误消息 找不到兼容的GPU,或无法加载各自的编码器库(No compatible GPU found, or failed to load their respective encoder libraries) ,很可能你的GPU不支持NVENC或AMF。
支持的操作系统
像素流插件支持Windows、Linux和Mac平台。不支持OSX。
但是,像素流插件以及随附的信令和Web服务器仅在Windows 10、Ubuntu 18.04/20.04和MacOS Ventura 13.5.1上进行了测试。尚未在其他操作系统上测试,包括Windows 7或8。
支持的客户端浏览器
像素流播放适用于支持WebRTC协议的现代浏览器。例如,它经过了测试,已知可在以下浏览器的最新版本中运行,无需额外配置:
- Google Chrome(台式机和移动设备)
- Microsoft Edge(台式机)
- Mozilla Firefox(台式机和移动设备)
- Apple Safari(台式机和移动设备)
Microsoft Edge和Opera等其他浏览器可能需要附加组件或插件,并且可能在某些系统上运行不了。
支持的编码器
编码器 | 加速 | 1080p/4K的编码速度 | 优点 | 低比特率的质量 | 每个对等端的CPU/GPU使用情况。 |
---|---|---|---|---|---|
H.264 | GPU(Nvidia、AMD或Apple M系列处理器) | 约8.97msms/约24.17ms | 快速编码/解码速度。在硬件层面广受许多设备的支持。 | 斑驳 | GPU仅对一个会话编码,无论对等端数量如何。 |
VP8 | CPU | 约10.5/约25ms | 在较低比特率生成更好的图像质量。 | 一般 | CPU性能随对等端数量而线性缩放。 |
VP9 | CPU | 约15ms/约50ms | 相较于其他编码器,在最低比特率有最高的图像质量。 | 良好 | CPU性能随对等端数量而线性缩放。 |
AV1 | GPU(NVIDIA Ada Lovelace或更新型号) | 约8.98ms/约15.8ms | 相比其他编码器,在最低比特率下拥有最高的图像质量。 | 最佳 | GPU仅对一个会话编码,无论对等端数量如何。 |
对于1080p流媒体,随着比特率提高到20mbps以上,所有编码器的质量都将类似。此处列出的编码速度是估算值,取自RTX 3060和AMD 3900X。但AV1例外,它是在NVIDIA RTX 6000 Ada上测试的。 如果你的编码硬件支持,我们推荐使用AV1编码解码器,因为它可以在更低的比特率下生成更高质量的视频。
默认网络端口
像素流系统的组件使用下面指定的默认端口通信。你需要确保在运行每个组件的主机上打开这些端口。
组件 | 端口 |
---|---|
信令服务器主机 |
|
配对器服务器主机 |
|
SFU端口 |
|
像素流控制台命令和启动参数
本小节中含有对使用像素流的应用程序非常实用的控制台命令和启动参数。
所需的启动参数
启动使用像素流的虚幻引擎应用程序时,必须指定以下启动参数:
命令行参数 | 说明 |
---|---|
-PixelStreamingIP=<value> 或 <domain> |
指定运行信令和Web服务器的计算机的IP地址或域名。 |
-PixelStreamingPort=<value> |
指定信令和Web服务器侦听来自虚幻引擎应用程序的传入通信的端口。信令和Web服务器使用默认值 8888 。 |
-PixelStreamingURL=<value> |
仅当 其中也必须包括WebSocket协议。例如: |
标准的像素流应用程序启动如下:
MyPixelStreamingApplication.exe -PixelStreamingIP=127.0.0.1 -PixelStreamingPort=8888
或:
MyPixelStreamingApplication.exe -PixelStreamingURL="ws://127.0.0.1:8888"
虚幻引擎启动参数
以下参数并非专用于像素流。但是,这些参数可能会适用于许多像素流应用程序,尤其是在云部署中。
命令行参数 | 说明 |
---|---|
-RenderOffscreen |
自动运行虚幻引擎应用程序,在本地计算机上完全没有可见的渲染。该应用程序不会显示窗口,也不会全屏渲染。 你可以将此参数与-ForceRes结合使用,以便阻止虚幻引擎根据主显示器的分辨率自动调整分辨率。 如果省略此参数,虚幻引擎应用程序窗口将正常渲染。如果此应用程序窗口最小化,像素流视频和输入捕获将停止工作。因此,我们建议始终包含此参数,除非你需要在运行时在同一台计算机上本地查看虚幻引擎应用程序的渲染输出。 |
-ForceRes |
当与-ResX和-ResY结合使用时,这将强制虚幻引擎达到指定的分辨率。这在通常没有显示分辨率的云部署中很有用。 |
-ResX=<value> |
设置虚幻引擎应用程序启动时分辨率的宽度分量。 |
-ResY=<value> |
设置虚幻引擎应用程序启动时分辨率的高度分量。 |
-AudioMixer |
强制虚幻引擎将软件混合用于音频,如果没有音频设备,这可能是必需操作…… |
-Unattended |
在遇到错误时抑制生成对话框。这在屏幕外或容器中运行虚幻引擎时很有用,因为在这些场景中消息框可能会无限期挂起。 |
-StdOut 和 -FullStdOutLogOutput |
这两个标记的组合会产生最大的日志输出,这在SSH终端中调试或查看实时日志时非常有用。 |
可选的控制台命令启动参数
你可以在运行时将以下设置指定为控制台变量,或在启动时指定为程序参数。
未指定这些设置时,系统将为使用的每种设置提供默认值。大多数用户不需要更改这些设置。事实上,这些值中有许多值由WebRTC内部控制,覆盖它们可能会导致性能下降。
像素流插件配置
更改以下设置将配置像素流插件。
控制台变量 | 命令行参数 | 默认值 | 说明 |
---|---|---|---|
PixelStreaming.HUDStats |
-PixelStreamingHudStats |
false |
是否在游戏内HUD上显示像素流统计数据。 |
PixelStreaming.DisableLatencyTester |
-PixelStreamingDisableLatencyTester |
false |
将能够通过像素流插件管线的延迟测试的触发功能禁用。 |
PixelStreaming.KeyFilter |
-PixelStreamingKeyFilter=<values> |
"" |
一系列要从流客户端忽略的按键,各个按键用逗号分隔。例如,"W,A,S,D"可用于过滤掉默认移动键。 |
PixelStreaming.UseMediaCapture |
-PixelStreamingUseMediaCapture |
false |
使用MediaIOFramework的媒体捕获,而不是像素流送内部的后备缓冲区源来捕获帧。这在某些情况下可以作为首选项。 |
N/A | -AllowPixelStreamingCommands |
false |
用户是否应该能够通过 emitConsoleCommand javascript发送控制台命令。 |
N/A | -PixelStreamingHideCursor |
false |
是否隐藏UE应用程序光标。 |
-SimulcastParameters | -SimulcastParameters="[layer_list]" |
-SimulcastParameters=1.0,5000000,100000000,2.0,1000000,5000000 |
层的格式为[scale_down_factor],[min_bitrate],[max_bitrate]。你应该始终声明至少一层,并且建议缩减因子至少为1。如,缩减因子2表示分辨率减半。 |
编码器配置
更改以下设置将配置像素流插件使用的底层视频编码器。
控制台变量 | 命令行参数 | 默认值 | 说明 |
---|---|---|---|
PixelStreaming.Encoder.Codec |
-PixelStreamingEncoderCodec=<value> |
H264 |
用于像素流送的指定编码器。支持的编码器包括:"H264"、"AV1"、"VP8"、"VP9" |
PixelStreaming.Encoder.TargetBitrate |
-PixelStreamingEncoderTargetBitrate=<value> |
-1 |
目标比特率(bps)。设置此项会忽略WebRTC想要的比特率(不推荐)。设置为-1时禁用。 |
PixelStreaming.Encoder.MaxBitrateVBR |
-PixelStreamingEncoderMaxBitrate=<value> |
20000000 |
最大比特率(bps)。 在带有NVENC的CBR速率控制模式下不起作用。 |
PixelStreaming.Encoder.DumpDebugFrames |
-PixelStreamingDebugDumpFrame=<value> |
false |
将帧从编码器转储到磁盘上的文件,以便进行调试。 |
PixelStreaming.Encoder.MinQP |
-PixelStreamingEncoderMinQP=<value> |
-1 |
0-51,值越低,质量越高,但比特率越高。注意:-1将禁用对最小QP的所有硬性限制。 |
PixelStreaming.Encoder.MaxQP |
-PixelStreamingEncoderMaxQP=<value> |
-1 |
0-51,值越低,质量越高,但比特率越高。注意:-1将禁用对最大QP的所有硬限制。 |
PixelStreaming.Encoder.RateControl |
-PixelStreamingEncoderRateControl=<value> |
"CBR" |
PixelStreaming视频编码器RateControl模式。支持的模式有"ConstQP"、"VBR"、"CBR"。注意:CBR是我们唯一推荐的模式。 |
PixelStreaming.Encoder.EnableFillerData |
-PixelStreamingEnableFillerData=<value> |
false |
通过填充垃圾数据来维持恒定的比特率。注意:CBR和MinQP = -1时不需要。 |
PixelStreaming.Encoder.Multipass |
-PixelStreamingEncoderMultipass=<value> |
"FULL" |
编码器每帧要传递多少次。更多细节,请参阅NVENC文档。支持的模式有 "DISABLED" 、"QUARTER" 、"FULL" |
PixelStreaming.Encoder.MaxSessions |
-PixelStreamingEncoderMaxSessions |
-1 |
设置像素流送并发硬件编码器会话的最大数量。(-1意味着无数量限制)。 |
PixelStreaming.Encoder.H264Profile |
-PixelStreamingH264Profile=<value> |
"BASELINE" |
编码器使用的H264配置文件。支持的模式有 基线(Baseline)是唯一保证能受到支持的配置文件,前提是接收方的设备支持WebRTC。 |
WebRTC配置
更改以下设置将配置像素流插件内部使用的WebRTC库。
控制台变量 | 命令行参数 | 默认值 | 说明 |
---|---|---|---|
N/A |
-LogCmds="LogPixelStreamingWebRTC <LogLevel>" |
Log |
指定WebRTC的日志级别。对于调试WebRTC非常实用。一些有帮助的Log级别包括:Log、Verbose、VeryVerbose |
PixelStreaming.WebRTC.DegradationPreference |
-PixelStreamingWebRTCDegradationPreference=<value> |
"MAINTAIN_FRAMERATE" |
降级偏好是WebRTC的策略,即在更改编码器比特率/QP不足时,破坏性地调整比特率(更改分辨率/丢帧)。 |
PixelStreaming.WebRTC.MaxFps |
-PixelStreamingWebRTCMaxFps=<value> |
60 |
最大FPS WebRTC将尝试捕获/编码/传输。 |
PixelStreaming.WebRTC.StartBitrate |
-PixelStreamingWebRTCStartBitrate=<value> |
10000000 |
WebRTC将尝试开始流送的起始比特率(bps)。 值必须介于最小和最大比特率之间。 |
PixelStreaming.WebRTC.MinBitrate |
-PixelStreamingWebRTCMinBitrate=<value> |
100000 |
最小比特率(bps),WebRTC的请求不会低于该值。 注意不要将此值设置得太高,否则WebRTC会丢帧。 |
PixelStreaming.WebRTC.MaxBitrate |
-PixelStreamingWebRTCMaxBitrate=<value> |
100000000 |
最大比特率(bps),WebRTC的请求不会超出该值。 注意,不要将此值设置得太高,因为本地(理想)网络实际上会尝试达到此值。 |
PixelStreaming.WebRTC.LowQpThreshold |
-PixelStreamingWebRTCLowQpThreshold=<value> |
25 |
仅在 |
PixelStreaming.WebRTC.HighQpThreshold |
-PixelStreamingWebRTCHighQpThreshold=<value> |
37 |
仅当PixelStreaming.Encoder.MaxQP=-1时使用。值在1至51之间。如果WebRTC的帧数高于此QP,它将尝试做出适配决定。 |
PixelStreaming.WebRTC.DisableReceiveAudio |
-PixelStreamingWebRTCDisableReceiveAudio |
false |
禁用从浏览器接收音频到UE。 如果不需要音频,在某些情况下可以改善延迟。 |
PixelStreaming.WebRTC.DisableTransmitAudio |
-PixelStreamingWebRTCDisableTransmitAudio |
false |
禁止将UE音频传输到浏览器。 如果不需要音频,在某些情况下可以改善延迟。 |
PixelStreaming.WebRTC.DisableAudioSync |
-PixelStreamingWebRTCDisableAudioSync |
true |
在WebRTC中禁用音频和视频轨道的同步。 如果不需要同步,这会改善延迟。 |
PixelStreaming.WebRTC.MinPort |
-PixelStreamingWebRTCMinPort |
49152 |
设置WebRTC端口分配器的最小可用媒体端口数量。 |
PixelStreaming.WebRTC.MaxPort |
-PixelStreamingWebRTCMaxPort |
65535 |
设置WebRTC端口分配器的最大可用媒体端口数量。 |
PixelStreaming.WebRTC.PortAllocator.Flags |
-PixelStreamingWebRTCPortAllocatorFlags |
"" |
设置WebRTC端口分配器的标记。标记用逗号分隔。支持的值有:DISABLE_UDP, DISABLE_STUN, DISABLE_RELAY, DISABLE_TCP, ENABLE_IPV6, ENABLE_SHARED_SOCKET, ENABLE_STUN_RETRANSMIT_ATTRIBUTE, DISABLE_ADAPTER_ENUMERATION, DISABLE_DEFAULT_LOCAL_CANDIDATE, DISABLE_UDP_RELAY, ENABLE_IPV6_ON_WIFI, ENABLE_ANY_ADDRESS_PORTS, DISABLE_LINK_LOCAL_NETWORKS |
PixelStreaming.WebRTC.DisableFrameDropper |
-PixelStreamingWebRTCDisableFrameDropper |
false |
Disables the WebRTC internal frame dropper which can be useful if frames are being dropped in cases like LAN streaming. |
PixelStreaming.WebRTC.VideoPacing.MaxDelay |
-PixelStreamingWebRTCVideoPacingMaxDelay |
-1.0 |
Enables the WebRTC-Video-Pacing field trial and sets the max delay (ms) parameter (values below zero are discarded). |
PixelStreaming.WebRTC.VideoPacing.Factor |
-PixelStreamingWebRTCVideoPacingFactor |
-1.0 |
Enables the WebRTC-Video-Pacing field trial and sets the video pacing factor parameter. Larger values are more lenient on larger bitrates. |
PixelStreaming.WebRTC.FieldTrials |
-PixelStreamingWebRTCFieldTrials |
"" |
Sets the WebRTC field trials string. Format: "TRIAL1/VALUE1/TRIAL2/VALUE2/". |
信令服务器配置参数
有两种参数设置方法:
- 在命令行上,当你通过运行
Start_SignallingServer.ps1
或node cirrus.js
启动信令和Web服务器时。在这种情况下,在每个参数名称前加上--
(两个连接号),然后在它后面加上空格,后面是你要设置的值。例如:--httpPort 81
。 - 在配置文件中。默认情况下,信令和Web服务器(
cirrus.js
)会在同一文件夹中查找名为config.json
的文件。在这种情况下,将每个参数和你要为其设置的值设置为文件中定义的JSON对象中的键值对。如果你已经至少启动过一次信令和Web服务器,请参阅/Samples/PixelStreaming/WebServers/SignallingWebServer/config.json
文件中已经列出的参数,以获取示例。
参数 | 说明 |
---|---|
--PublicIp <value> |
运行信令和Web服务器的计算机的公共IP。 |
--HttpPort <value> |
信令和Web服务器用于与客户端浏览器进行HTTP连接的端口。 |
--StreamerPort <value> |
信令和Web服务器侦听来自虚幻引擎应用程序的传入连接的端口。 |
--peerConnectionOptions <value> |
指定你要虚幻引擎应用程序和浏览器在需要发现自己的外部IP地址时查询的STUN和TURN服务器的主机名或IP地址。 即使你使用JSON配置文件提供参数,该值也必须格式化为字符串。始终用双引号将其括起来,并使用反斜杠来转义字符串中的所有引号,如上所示。 |
--HomepageFile <value> |
连接客户端浏览器不请求特定URL时,服务器将向其提供的默认页面文件名。 |
--AdditionalRoutes <value> |
指定信令和Web服务器应该提供的其他文件夹。 |
--LogToFile <value> |
确定信令和Web服务器是否将日志消息写入 |
--UseHttps <value> |
将此参数设置为 true ,使信令服务器仅接受 httpsPort 上的HTTPS连接。 |
--HttpsPort <value> |
用于侦听HTTPS连接的端口。仅在启用 UseHttps 时使用。 |
--UseMatchmaker <value> |
确定信令和Web服务器是否将其当前状态发送到匹配器服务器,以便帮助客户端浏览器找到当前未使用的信令服务器和虚幻引擎应用程序。 |
--MatchmakerAddress <value> |
信令和Web服务器应该连接的匹配器服务器的IP地址。 |
--MatchmakerPort <value> |
匹配器服务器侦听来自信令和Web服务器的传入消息的端口。 |
--SFUPort <value> |
打开信令服务器和SFU之间的连接。 |
--ConfigFile <value> |
指定信令服务器用于检索上述属性值的配置文件的路径和文件名。只能在命令行上设置。 |
匹配器服务器命令行参数
当你通过运行 run.bat
文件启动匹配器服务器,或通过运行 node.exe matchmaker.js
启动它时,请在命令行上提供这些参数。
参数 | 说明 |
---|---|
--httpPort <value> |
设置匹配器侦听来自客户端的HTTP连接的端口号。 |
--matchmakerPort <value> |
设置匹配器侦听来自Cirrus信令服务器的传入消息的端口号。 |
SFU服务器参数
参数 | 说明 |
---|---|
--PublicIP=<value> |
你的SFU服务器将使用的公共IP地址。 |