Mua*_*ath 5 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'}
});
Run Code Online (Sandbox Code Playgroud)
可以像这样获取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);
Run Code Online (Sandbox Code Playgroud)
我发送画布(一个视频帧):
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);
Run Code Online (Sandbox Code Playgroud)
这erizoStream.sendData({ base64:mydata});对速度性能毫无用处.
它快速发送数据,但在接收数据时出现动画问题:
stream.addEventListener("stream-data", function(evt){
//alert('Received data '+ evt.msg['base64']);
if(evt.msg['base64']){
renderBase64(evt.msg['base64']);
}
});
Run Code Online (Sandbox Code Playgroud)
设定setInterval时间200ms使发送速度变快.但是当我在新窗口中打开页面(选项卡)时,这会更快.
我想在不使用的情况下减少视频帧(比特大小) erizoStream.sendData();.仅从视频本身或使用它解决速度性能问题.
当出版室..
room.publish(localStream, {maxVideoBW: 300});
Run Code Online (Sandbox Code Playgroud)
可以添加maxVideoBW,它将最大视频带宽设置为 300 kbps。这将质量值降低到适当的带宽值。
并且不要忘记改变maxFrameRate:
var video_constraints = {mandatory: {
maxFrameRate:30
},
optional: [ ]
};
Run Code Online (Sandbox Code Playgroud)
作为计算它的示例:
如果每秒 30 帧,带宽为 300 kbps:
那么您使用的是 300/30 = 10 KB/秒的上传速度。
通过将 BW 减少到 35,您可以解决速度性能问题。