本机 WebRTC 丢帧

Native WebRTC dropping frames

总结:如何使用本机 WebRTC 流式传输高质量视频?

我有一个 1920x1080 的 h264 流,大约 30fps。我目前可以将其从本地主机上的服务器流式传输到本地主机上的本机客户端。

我使用 Google 的 WebRTC 本机库编写了一个 WebRTC 服务器。我编写了一个 VideoEncoder 和 VideoEncoderFactory,它们获取由已经编码的数据组成的帧,并通过视频轨道广播它。使用它我可以通过管道将我的 h264 流发送到 WebRTC 服务器,我可以在浏览器中看到视频流。

但是,只要有东西移动,视频就会损坏。它继续播放,但充满了人工制品。最终我发现 WebRTC 正在丢弃我的一些帧。当我在将每个帧传递给 rtc::AdaptedVideoTrackSource::OnFrame 之前将一个按顺序增加的 ID 附加到每个帧并将这个相同的 ID 记录在 webrtc::VideoEncoder::Encode 中时,我可以看到我的一些帧完全消失了。

这是有道理的,我正在尝试通过用于视频聊天的东西流式传输高质量视频,并降低我的帧率来修复损坏。但是,我并没有要求 WebRTC 库做很多事情,它只是将已经编码的数据转发到本地主机上的客户端。我有一个本机应用程序可以很好地执行此操作,并且我已经看到一个可以执行此操作的浏览器 WebRTC 客户端。 SDP 中是否有一个字段或一些配置更改可以让我流式传输我的视频?

这就是解决方案 How to control bandwidth in WebRTC video call?

我听说过要更改 sdp 报价,但没有考虑,因为我被告知浏览器默认情况下会接受无限带宽,只有在您想限制带宽时才需要这样做。但是,添加 "b=AS:high number" 解决了我所有的问题。