Licode Erizo.Stream 视频帧质量

Posted

技术标签:

【中文标题】Licode Erizo.Stream 视频帧质量【英文标题】:Licode Erizo.Stream Video Frame quality 【发布时间】:2014-08-11 23:18:06 【问题描述】:

我使用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 time 200ms 使得发送只进行得很快。但是当我在新窗口中打开页面(标签)时,这会更快。

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

【问题讨论】:

那么,changing the quality at the Jpeg url 创作结束了吗?您当前对 getUserMedia 调用的视频限制是什么? 【参考方案1】:

当出版室..

        room.publish(localStream, maxVideoBW: 300);

可以添加maxVideoBW,它将最大视频带宽设置为 300 kbps。 这会将质量值降低到正确的带宽值。

别忘了更改maxFrameRate

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

作为一个计算它的例子:

如果您每秒有 30 帧,带宽为 300 kbps:

那么您正在使用 300/30 = 10 KB/秒的上传速度。

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

Quality control

【讨论】:

这在 Firefox 中有效吗?根据我的经验,Firefox 不允许在 SDP 中设置带宽上限。 @Taymoor Q 链接好像坏了。你能更新一下吗?

以上是关于Licode Erizo.Stream 视频帧质量的主要内容,如果未能解决你的问题,请参考以下文章

I帧B帧P帧NALU类型

在 Unity 中使用自定义视频源时视频质量不佳

基于块流协议保证音频优先发送

licode学习之编译篇--1

licode学习之编译篇--1

通过 RTP 流式传输,RTMP 播放质量问题