我正在编写一个使用 Gstreamer 在两个客户端之间流式传输视频的应用程序。为此,我用 C 语言编写了两个代码,它们实现了一个发送管道和一个接收管道,它们都使用rtpbin来发送/接收 RTP 流。沿着 RTP 流,还交换了两个 RTCP 流。发送方的情况可以表示如下:
.-------. .---------. .----------. .-------.
|x264enc| |rtp264pay| | rtpbin | |udpsink| RTP
->sink src->sink src->send_rtp send_rtp->sink | port=3000
'-------' '---------' | | '-------'
| |
| | .-------.
| | |udpsink| RTCP
| send_rtcp->sink | port=3001
.-------. | | '-------' sync=false
RTCP |udpsrc | | | async=false
port=3005 | src->recv_rtcp |
'-------' '----------'
我想实现一种方法来估计发送方和接收方之间可用的带宽,以便我可以将其传回x264enc以调整编码比特率。
我搜索了很多,但是关于这个主题的大多数问题都涉及 webrtc 和webrtcbins,我在这里没有使用它们。这些webrtcbin使用 REMB 数据包,这是一种估计带宽的 RTCP 标头扩展。
有谁知道我如何使用rtpbins估计我的情况下的带宽?谁能帮助我如何在 C 中添加/实现 REMB RTCP 标头扩展?