我们最终进行了修改h264_encoder_impl,将所有OpenH264 API调用替换为我们自己的编码器调用。
WebRTC不断要求编码器实现在认为适合当前可用带宽的情况下更新比特率和帧率。我们使用的硬件编码器仅支持动态更新比特率,并且在WebRTC上运行良好。帧速率设置为固定值。
由于我们没有按照WebRTC的要求更改帧速率,并且仍然可以正常工作,我认为在为给定的编码缓冲区正确执行RTPFragmentation之后,也可以以相同的方式发送编码流。
过去我们曾尝试分流 WebRTC 项目的编码部分,但运气不佳(我们希望将已编码的数据传递给多个 WebRTC 客户端)。我的印象是它与服务质量紧密结合。WebRTC 希望根据当前网络流量调整编码器设置。
我们发现的最佳解决方案是使用OpenWebRTC 项目中的 、 和 元素dtlssrtpenc实际nicesink推出您自己的 WebRTC:nicesrc
https://github.com/EricssonResearch/openwebrtc-gst-plugins
这一点都不容易做到。WebRTC 的握手过程非常复杂,并且那些 GStreamer 元素需要大量特殊的连接,但它确实产生了预期的结果。
哦,顺便说一句,我们的经验是 openh264 对于 WebRTC 流量非常有效,我们最终在很多情况下都使用它。