如何在WebRTC中使用FFmpeg H264编码器?

SMU*_*hah 7 video html5 ffmpeg h.264 webrtc

对于H264编码,WebRTC使用不支持硬件加速的OpenH264.WebRTC中包含许多第三方编解码器,包括WebRTC.如何使用FFmpeg代替?"is_component_ffmpeg = true"似乎没有做任何事情.

这里的目标是使用硬件加速进行编码,以减少延迟和CPU使用.我们有硬件编码器运行,但不知道如何将其插入webrtc.使用硬件加速是最接近的选择.

我们在哪里需要看看使用FFmpeg?或使用外部编码的h264数据流?

SMU*_*hah 5

我们最终进行了修改h264_encoder_impl,将所有OpenH264 API调用替换为我们自己的编码器调用。

WebRTC不断要求编码器实现在认为适合当前可用带宽的情况下更新比特率和帧率。我们使用的硬件编码器仅支持动态更新比特率,并且在WebRTC上运行良好。帧速率设置为固定值。

由于我们没有按照WebRTC的要求更改帧速率,并且仍然可以正常工作,我认为在为给定的编码缓冲区正确执行RTPFragmentation之后,也可以以相同的方式发送编码流。


mpr*_*mpr 3

过去我们曾尝试分流 WebRTC 项目的编码部分,但运气不佳(我们希望将已编码的数据传递给多个 WebRTC 客户端)。我的印象是它与服务质量紧密结合。WebRTC 希望根据当前网络流量调整编码器设置。

我们发现的最佳解决方案是使用OpenWebRTC 项目中的 、 和 元素dtlssrtpenc实际nicesink推出您自己的 WebRTC:nicesrc

https://github.com/EricssonResearch/openwebrtc-gst-plugins

这一点都不容易做到。WebRTC 的握手过程非常复杂,并且那些 GStreamer 元素需要大量特殊的连接,但它确实产生了预期的结果。

哦,顺便说一句,我们的经验是 openh264 对于 WebRTC 流量非常有效,我们最终在很多情况下都使用它。