Go Live 是 Discord 最受欢迎的功能之一,允许用户将应用程序、屏幕,尤其是视频游戏流式传输给通话中的其他人。Go Live 最初于 2019 年 8 月 15 日发布于桌面,后来逐渐支持网络浏览器和手机,去年甚至获得了 Xbox Series X|S 和 Xbox One 游戏机的支持。
Go Live 的屏幕共享技术是一个多进程流水线,需要流媒体、观众和 Discord 后台之间相互协调。流程的每个部分都需要支持大图像分辨率和高帧率,这对于从展示您最喜爱的快节奏游戏到文档共享过程中清晰的文本可读性等一切都至关重要。流程的任何部分都可能成为瓶颈并降低体验,因此每个组件都必须高效工作。
Capture(采集)
Go Live 可使用操作系统上的最佳方法持续捕捉应用程序和屏幕的更新。它有一个强大的回退系统,因此如果一种方法失败,它会迅速切换到下一种方法,这样流就不会中断。所有捕获方法都有相同的目标,但工作方式却各不相同–有些方法由操作系统直接提供,而其他方法则需要 Discord 通过 dll 注入的方式进入应用程序,捕获它正在渲染的内容。
Discord 使用操作系统特定的音频 API 从共享屏幕或应用程序中捕获音频。通常情况下,音频由应用程序的多个进程生成(例如,游戏音乐由一个进程生成,语音聊天由另一个进程生成),因此我们会捕获共享进程及其所有子进程的音频。
Encode(编码)
流媒体中一个未编码的 1080p 帧可能高达 6 兆字节。如果一秒钟发送几十个这样的帧,大多数用户的带宽能力可能会不堪重负。Discord 会协商最佳编解码器,使流媒体可以编码,所有观众可以解码。编码后的帧体积更小,通过网络发送也更易于管理。
Discord 目前支持 VP8 和 H264 视频编解码器,并在特定平台上提供 HEVC 和 AV1 编码器。现代图形处理器通常自带内置编码器和解码器硬件,Discord 将利用这些硬件而不是基于软件的实现来减少 CPU 和内存的使用。
编码器的最终输出质量(包括帧速、分辨率和图像质量)取决于网络可用带宽的估计值。网络条件是不断变化的,因此编码器需要实时处理估计变化。Go Live 无法像流媒体服务那样缓冲几秒钟以保持质量。当网络条件急剧下降时,编码器将开始丢帧以减少拥塞,客户端将调整图像质量和延迟,以便即使在次优网络条件下也能接受图像质量和延迟。
Transmission(传输)
Go Live 流媒体传输到 Discord 后台,然后路由到观看者。这就隐藏了通话用户之间的 IP 地址,并允许服务控制流数据的路由。例如,只有当通话参与者正在观看视频时,服务才会将视频转发给他们。
Go Live 流媒体受限于通过网络的数据量。由于流媒体需要让每个观众都能观看,因此流媒体传输的数据量不会超过最慢连接所能支持的数据量。此外,只有当至少有一名观众在观看时,流媒体才会传输数据。
带宽估算是一个复杂的过程,估算错误会极大地影响用户的 Go Live 体验。如果估算器低估了任何连接,流媒体的质量就会降低,因为它无法利用所有可用带宽。反之,如果估算器高估了可用带宽,流媒体发送的内容可能会超过网络的可靠传输能力,从而导致观众观看时出现大量卡顿和速度变慢现象。Discord 针对不同的使用情况使用不同的 WebRTC 带宽估算器。
Decode(解码)
流媒体将对所有观众都能解码的视频和音频进行编码。每次有人加入或离开语音通话时,Discord 都会重新协商编解码器,如果有硬件解码器,Go Live 会尽量使用硬件解码器,以减少资源占用。
音频和视频通过独立的 RTP 数据包发送,接收方在播放前会对它们进行同步。虽然 Go-Live 流与语音聊天不同步,但我们会尽量将延迟控制在较低水平,使大多数人不会注意到它。如果你在听到朋友们的欢呼声五秒钟后才看到精彩的比赛,那就太糟糕了。
如何衡量性能
Go Live 用户希望该功能能正常运行。对于一般视频质量,有许多因素需要优化,包括:
- 帧频
- 一致的帧传输
- 低延迟
- 图像质量(参见 VMAF)
- 网络利用率
我们还监控您系统的 CPU 和内存使用情况,确保不会降低您的整体体验。这些指标中有些是相互矛盾的,因此我们会做出权衡,以提供最佳的用户体验。例如,在增加一点延迟以减少丢帧和延迟过高时丢帧之间寻求平衡。
我们还监控通过调查(”好”、”中性 “和 “坏”)捕获的用户情感指标,该指标会定期在流媒体末尾弹出(是的,我们会阅读这些内容!)。虽然可能会有噪音,但这是一个全面的指标,可以从头到尾全面捕捉用户的情绪。这有助于我们发现问题,即使其他关键绩效指标看起来很健康。
结束语
很高兴 Go Live 仍然是 Discord 上一项受欢迎的功能,我们一直在寻找更多方法来改进这项技术。在过去的几个月里,我们一直在努力使它变得更好,因此请在未来关注我们如何改善体验的一些深入后续报道。
作者:Josh Stratton
译自:https://discord.com/blog/how-it-all-goes-live-an-overview-of-discords-streaming-technology
本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/yinshipin/46141.html