如何提高WebRTC的码率?
我正在使用WebRTC将1080p视频流从同一计算机(Windows10,Chrome 76)上的一个选项卡发送到另一个选项卡。而且接收端的视频质量不如发送端,码率只有2400kbps(300kb/s)左右,1080p和720p没有区别。摄像头移动时,视频分辨率也会降低。
如何提高WebRTC视频流的质量?
我已尝试修改SDP以提高比特率。http://www.rtcbits.com/2016/11/controlling-bandwidth-usage-in-webrtc.html
设置x-google-max-bitrate
peer.createAnswer().then(sdp => {
var arr = sdp.sdp.split('
');
arr.forEach((str, i) => {
if (/^a=fmtp:d*/.test(str)) {
arr[i] = str + ';x-google-max-bitrate=28000;x-google-min-bitrate=0;x-google-start-bitrate=20000';
}
});
sdp = new RTCSessionDescription({
type: 'answer',
sdp: arr.join('
'),
})
peer.setLocalDescription(sdp);
socket.emit('message_send', { type: 'answer', sdp: sdp.sdp });
});
输出接收速率(kb/s)
var prevReport = null;
var t = setInterval(function() {
if (!peer) {
prevReport = null;
return;
}
peer.getStats(null).then(reporter => {
reporter.forEach(report => {
if (report.type === 'inbound-rtp' && report.mediaType === 'video') {
if (!prevReport) {
prevReport = report;
} else {
console.log((report.bytesReceived - prevReport.bytesReceived) / (report.timestamp - prevReport.timestamp));
}
}
});
});
}, 1000);
希望1080p的码率能明显高于720p。
有没有办法让WebRTC传输无损或低损耗的视频流?
仅当一个Chrome选项卡将视频发送到另一个Chrome选项卡时,才存在300kb/s的限制。当Chrome选项卡向Firefox选项卡发送视频时,
x-google-max-bitrate
起作用。
解决方案
我尝试设置b=AS:10000
,但它起作用了。
peer.createAnswer().then(sdp => {
var arr = sdp.sdp.split('
');
arr.forEach((str, i) => {
if (/^a=fmtp:d*/.test(str)) {
arr[i] = str + ';x-google-max-bitrate=10000;x-google-min-bitrate=0;x-google-start-bitrate=6000';
} else if (/^a=mid:(1|video)/.test(str)) {
arr[i] += '
b=AS:10000';
}
});
sdp = new RTCSessionDescription({
type: 'answer',
sdp: arr.join('
'),
})
peer.setLocalDescription(sdp);
socket.emit('message_send', { type: 'answer', sdp: sdp.sdp });
});
相关文章