增加 webrtc 帧率以允许虚拟桌面视图

问题描述

是否可以在屏幕共享期间提高 Web RTC 帧速率,以允许在 VR 中查看虚拟桌面?当前测试,请求设置为 30,显示桌面到桌面连接的帧速率约为 20 fps,帧速率为 17 fps,连接到 Oculus Quest 2 时为 13。在这些速度下,鼠标由控制源计算机落后于其在共享屏幕视图中的实际位置,足以使其很难使用。这是尝试设置帧速率的当前代码


var displayMediaOptions = { 视频: { 帧率:30 } };

window.displayMediaStream = await navigator.mediaDevices.getdisplayMedia(displayMediaOptions);


我还尝试了 minFrameRate 并根据其他帖子增加了对等连接中的比特率,但没有效果。大多数帖子讨论了如何降低比特率,有些帖子,例如https://github.com/ant-media/Ant-Media-Server/wiki/How-to-improve-WebRTC-bit-rate%3F推荐 10-20 作为最佳帧率,但如果需要,可以在不破坏一切的情况下强制提高它,还是需要其他解决方案?其他虚拟桌面解决方案需要本机应用程序和/或到源计算机的电缆链接 - 这是解决方案吗?

解决方法

WebRTC 实现拥塞控制:它动态探测网络,并确定一个可以安全使用的速率。如果探测速率过低,会降低帧率、降低分辨率或降低视频质量。

除了使用更快的网络之外,还有三种方法可以以分辨率或质量为代价来提高帧率:

  • 您可以通过将 video.heightvideo.width 约束传递给 getUserMedia 来降低捕获分辨率;
  • 您可以通过将 scaleResolutionDownBy 约束传递给 RTCRtpSender.setParameters 来请求对视频进行下采样;
  • 您可以通过将 contentHint 传递给 RTCRtpSender.setParameters 来请求速率控制更愿意牺牲分辨率和质量。