WebRTC没有提供这方面的接口,我们可以通过修改sdp信息来实现音视频流的传输带宽控制,sdp格式参考之前的文章:《WebRTC – SDP格式解析》
实现原理比较简单,就是分别在sdp的audio和video媒体部分加入b=AS:信息,可以参考下面的代码实现:
void updateSdpAudioVideoMaxKbps(QString &sdp, int audioMaxKbps, int videoMaxKbps) {
if (audioMaxKbps != -1) {
int audioStart = sdp.indexOf("m=audio");
if (audioStart != -1) {
int insertStart = sdp.indexOf("\r\n", audioStart + strlen("m=audio"));
if (insertStart != -1) {
insertStart += (strlen("\r\n"));
sdp.insert(insertStart, QString("b=AS:%1\r\n").arg(audioMaxKbps));
}
}
}
if (videoMaxKbps != -1) {
int videoStart = sdp.indexOf("m=video");
if (videoStart != -1) {
int insertStart = sdp.indexOf("\r\n", videoStart + strlen("m=video"));
if (insertStart != -1) {
insertStart += (strlen("\r\n"));
sdp.insert(insertStart, QString("b=AS:%1\r\n").arg(videoMaxKbps));
}
}
}
}
调用SetLocalDescription应用修改完之后的sdp,并且通过信令服务器转发到对端。