Performance 流视频帧质量
我使用的是开源的WebRTC通信平台。我想降低视频质量(视频帧位大小) 流看起来像这样:Performance 流视频帧质量,performance,video-streaming,html5-video,webrtc,licode,Performance,Video Streaming,Html5 Video,Webrtc,Licode,我使用的是开源的WebRTC通信平台。我想降低视频质量(视频帧位大小) 流看起来像这样: var stream = Erizo.Stream({ audio:true, video:video_constraints, data: true, attributes: {name:'myStream', type:'public'} }); var bitmap; var canvas = document.createElement('canvas'
var stream = Erizo.Stream({
audio:true,
video:video_constraints,
data: true,
attributes: {name:'myStream', type:'public'}
});
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);
有可能获得这样的视频帧:
var stream = Erizo.Stream({
audio:true,
video:video_constraints,
data: true,
attributes: {name:'myStream', type:'public'}
});
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);
我发送画布(一个视频帧):
var stream = Erizo.Stream({
audio:true,
video:video_constraints,
data: true,
attributes: {name:'myStream', type:'public'}
});
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()代码>。仅从视频本身或使用视频解决速度性能问题。发布室时
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,您可以解决速度性能问题
那么,创作结束了?您当前对getUserMedia调用的视频限制是什么?这在Firefox中有效吗?根据我的经验,Firefox不允许在SDP中设置带宽上限。@Taymoq或链接似乎已断开。你能更新一下吗?