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



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

此处的目标是使用硬件加速进行编码,以减少延迟和 CPU 使用率。我们有硬件编码器正在运行,但不知道如何将其插入webrtc。使用硬件加速是最接近的选项。

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

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

WebRTC不断要求编码器实现更新比特率和帧率,因为它认为适合当前的可用带宽。我们使用的硬件编码器仅支持动态更新比特率,并且可以在WebRTC上正常工作。帧速率设置为固定值。

由于我们没有按照 WebRTC 的意愿更改帧速率并且它仍然运行良好,我认为在对给定的编码缓冲区仅正确执行 RTPFragmentation 后,编码流也可以以相同的方式发送。

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

我们发现最好的解决方案是使用OpenWebRTC项目中的dtlssrtpencnicesinknicesrc元素来实际滚动你自己的WebRTC:

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

这根本不容易做到。 WebRTC有一个非常复杂的握手,那些GStreamer元素需要很多特殊的连接,但它确实产生了预期的结果。

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

最新更新