我们正在使用licode MCU将视频从Google Chrome流式传输到服务器并进行录制.这里棘手的部分是只涉及一个Chrome浏览器,因此服务器端代码必须处理向客户端发送反馈.
我们添加了服务器端代码,每5秒向客户端发送一次REMB(带宽)数据包.这导致客户端增加比特率以使视频质量良好.
我们用PLI数据包做了类似的事情,试图提高视频质量.录制的视频有块状文物,看起来不太好.当前代码每0.8秒发送一次PLI,这导致客户端发送一个关键帧(全帧视频).这解决了较差的视频质量,因为它强制关键帧,但是当丢包(wifi网络)时,它很快就会变坏.
我的问题是如何使用这些PLI数据包?
我认为PLI意味着:
PLI - Picture Loss Indication
Run Code Online (Sandbox Code Playgroud) 我使用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({ …
我正在开发一个使用 WebRTC 的用于教育目的的视频会议应用程序。它需要在星形拓扑中完成,因为它最多连接 20 个参与者。
从概念上讲它很容易理解,但我不知道如何开始,因为我没有任何示例。
所有客户端将使用 WebRTC 连接到服务器,服务器将以特定布局混合视频流并将其发送回所有客户端。以下是我的问题/困难:
服务器部分如何实现?什么是最好的技术(例如 NodeJS)?是否有类似星型拓扑应用的简单示例?
我们如何开始编写 MCU 代码?有例子吗?或者更容易定制像 Licode/Lynckia 这样的开源 MCU?
我如何估计我们将用作 MCU 服务器的正确 AWS EC2 实例类型?
我如何估算将在会议的 1 小时内传输的数据传输成本(大小,以 GB/TB 为单位)?
非常感谢,卡洛斯