I use Licode it is Open Source WebRTC Communications Platform. I want to reduce the video quality (Video-Frame bits size).
The stream looks like this:
var stream = Erizo.Stream({
audio:true,
video:video_constraints,
data: true,
attributes: {name:'myStream', type:'public'}
});
It is possible to get VideoFrame like this :
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);
And I send canvas (one Video Frame):
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);
The erizoStream.sendData({ base64:mydata}); is useless for speed performance.
It sends data fast but when receiving it has issues with animation:
stream.addEventListener("stream-data", function(evt){
//alert('Received data '+ evt.msg['base64']);
if(evt.msg['base64']){
renderBase64(evt.msg['base64']);
}
});
The set setInterval time 200ms makes sending only goes fast. But this goes faster when I open the page(tab) in new window.
I want to reduce the video frame (bits size) without using erizoStream.sendData();. Only from the video itself or using it with solving the speed performance issue.
When publishing room..
It is possible to add
maxVideoBW, it sets the max video bandwidth to 300 kbps. This reduces the quality value to become properly to bandwidth value.And don't forget to change
maxFrameRate:As an example to compute it :
If you have 30 Frame per second, and BandWidth 300 kbps:
Then you are using 300/30 = 10 KB/sec uploading.
By reducing BW to 35 you can solve the speed performance issue.
Quality control