对于H264编码,WebRTC使用不支持硬件加速的OpenH264。 WebRTC中包含许多第三方编解码器,包括WebRTC。如何使用FFmpeg代替? “is_component_ffmpeg = true”似乎没有做任何事情。
此处的目标是使用硬件加速进行编码,以减少延迟和CPU使用率。我们有硬件编码器运行,但不知道如何将其插入webrtc。使用硬件加速是最接近的选择。
我们需要在哪里查看使用FFmpeg?或使用外部编码的h264数据流?
答案 0 :(得分:4)
我们最后通过用我们自己的编码器调用替换所有OpenH264 API调用来修改h264_encoder_impl
。
WebRTC不断要求编码器实现更新比特率和帧率,因为它认为适合当前可用带宽。我们使用的HW编码器支持仅动态更新比特率,并且与WebRTC一起工作正常。帧速率设置为固定值。
由于我们没有按照WebRTC的意愿改变帧率并且它仍然工作正常,我认为编码流也可以在对给定的编码缓冲区仅执行RTPFragmentation properly之后以相同的方式发送。
答案 1 :(得分:2)
我们过去曾试图分流WebRTC项目的编码部分,但运气不佳(我们希望将已编码的数据传递给多个WebRTC客户端)。我的印象是它与服务质量紧密结合。 WebRTC希望根据当前网络流量调整编码器设置。
我们找到的最佳解决方案是使用OpenWebRTC项目中的dtlssrtpenc
,nicesink
和nicesrc
元素实际推出自己的WebRTC:
https://github.com/EricssonResearch/openwebrtc-gst-plugins
这一点都不容易。 WebRTC有一个非常复杂的握手,那些GStreamer元素需要很多特殊的连接,但它确实产生了预期的结果。
哦,顺便说一句,我们的经验是openh264对于WebRTC流量非常有效,我们最终在很多情况下使用它。