c++ - native WebRTC 丢帧

标签 c++ web webrtc h.264 sdp

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

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

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

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

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

最佳答案

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

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

关于c++ - native WebRTC 丢帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50683639/

相关文章:

javascript - 无法在 Firefox 上发送 Tokbox "signals"

javascript - 从浏览器录制音频并实时可视化

c++ - 禁止在没有用户定义构造函数的情况下显式复制数据成员

c++ - 您可以将 LPTSTR 转换为 BSTR 吗?

tomcat - 在已部署的 Tomcat Web 应用程序中触发操作

javascript - 得到答案后启动 `onicecandidate` 事件

C++ 模板化友元类

c++ - 使用cpp在opencv中的xml文件中追加元素

javascript - 在 Javascript 中使用 Ajax 检索 JSON 数据

javascript - Css 菜单下拉