Licode Erizo.Stream视频帧质量

时间:2014-06-21 09:11:34

标签: performance video-streaming html5-video webrtc licode

我使用Licode它是开源WebRTC通信平台。我想降低视频质量(视频帧位大小)。

该流看起来像这样:

var stream = Erizo.Stream({ 
     audio:true,
     video:video_constraints,
     data: true, 
     attributes: {name:'myStream', type:'public'}
});

可以像这样获取VideoFrame:

var bitmap;
var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');

canvas.id = "testCanvas";
document.body.appendChild(canvas);

setInterval(function() {
  bitmap = stream.getVideoFrame();
  canvas.width = bitmap.width;
  canvas.height = bitmap.height;
  context.putImageData(bitmap, 0, 0);
}, 100);

我发送画布(一个视频帧):

 var bitmap;
  var canvas = document.createElement('canvas');
  var context = canvas.getContext('2d');

  setInterval(function() {
        canvas.width = video.clientWidth;
        canvas.height = video.clientHeight;
        context.drawImage(video, 0, 0, canvas.width, canvas.height);
        mydata = canvas.toDataURL("image/jpeg");
        erizoStream.sendData({ base64:mydata});
    }, 200);

erizoStream.sendData({ base64:mydata});对速度表现毫无用处。

它快速发送数据,但在接收数据时出现动画问题:

stream.addEventListener("stream-data", function(evt){
           //alert('Received data '+ evt.msg['base64']);
           if(evt.msg['base64']){
            renderBase64(evt.msg['base64']);
            }

        });

设置setInterval时间200ms使得发送速度变快。但是当我在新窗口中打开页面(标签)时,这会更快。

我想在不使用erizoStream.sendData();的情况下缩小视频帧(位大小)。仅从视频本身或使用它来解决速度性能问题。

1 个答案:

答案 0 :(得分:4)

当出版室..

        room.publish(localStream, {maxVideoBW: 300});

可以添加maxVideoBW,它将最大视频带宽设置为300 kbps。 这会降低质量值,使其适应带宽值。

不要忘记更改maxFrameRate

var video_constraints = {mandatory: {
       maxFrameRate:30
      },
      optional: [ ]
  };

作为计算它的一个例子:

如果你有每秒30帧,BandWidth 300 kbps:

然后您使用300/30 = 10 KB /秒的上传。

通过将BW降低到35,您可以解决速度性能问题

Quality control