如何提高webrtc的比特率?

cyh*_*cyh 8 javascript 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('\r\n');
  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('\r\n'),
  })
  peer.setLocalDescription(sdp);
  socket.emit('message_send', { type: 'answer', sdp: sdp.sdp });
});
Run Code Online (Sandbox Code Playgroud)

输出接收速率(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);
Run Code Online (Sandbox Code Playgroud)

我希望 1080p 的比特率可以明显大于 720p。
有没有办法让 webrtc 传输无损或低损耗的视频流?


300kb/s 限制仅在 chrome 标签将视频发送到另一个 chrome 标签时存在。当 chrome 标签将视频发送到 firefox 标签时,x-google-max-bitrate工作正常。

cyh*_*cyh 7

我尝试设置b=AS:10000并且它有效。

peer.createAnswer().then(sdp => {
  var arr = sdp.sdp.split('\r\n');
  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] += '\r\nb=AS:10000';
    }
  });
  sdp = new RTCSessionDescription({
    type: 'answer',
    sdp: arr.join('\r\n'),
  })
  peer.setLocalDescription(sdp);
  socket.emit('message_send', { type: 'answer', sdp: sdp.sdp });
});
Run Code Online (Sandbox Code Playgroud)