这个问题不是询问有关分辨率和frameRates的问题getUserMedia().
它是关于如何在使用时降低/提高视频中一帧的质量getUSerMedia().
这里使用getUserMedia()进行演示.
如何改变视频的质量? //Please Fiddle answer.
码:
var video_constraints = {mandatory: {
maxWidth: 320,
maxHeight: 240,
maxAspectRatio:4/3,
maxFrameRate:1
},
optional: [ ]
};
var constraints = {audio: true, video: video_constraints };
navigator.getUserMedia(constraints, successCallback, errorCallback);
Run Code Online (Sandbox Code Playgroud) PRE-SCRIPTUM:
我搜索过StackOverflow并且没有Q/A解释调整WebRTC的所有可能性,以使其更适合最终产品.
问题:
WebRTC有一个非常好的用户体验,它正在削减优势.它应该是完美的网状电话(3-8人),但它还没有.网格调用的最大问题(所有参与者彼此交换流)是资源消耗,尤其是CPU.
以下是我想分享的一些统计数据:
2.3 GHz Intel Core i5(2核),OSX 10.10.2(14C109),4GB RAM,Chrome 40.0.2214.111(64位)
+------------------------------------+----------+----------+
| Condition | CPU | Delta |
+------------------------------------+----------+----------+
| Chrome (idle after getUserMedia) | 11% | 11% |
| Chrome-Chrome | 55% | 44% |
| Chrome-Chrome-Chrome | 74% | 19% |
| Chrome-Chrome-Chrome-Chrome | 102% | 28% |
+------------------------------------+----------+----------+
Run Code Online (Sandbox Code Playgroud)
题:
我想创建一个WebRTC调整表,它可以改善资源消耗并提高整体体验.除了下表中的那些设置之外,我还可以使用其他任何设置吗?
+------------------------------------+--------------+----------------------+
| Tweak | CPU Effect | Affects |
+------------------------------------+--------------+----------------------+
| Lower FPS | Low to high | Video quality lower |
| Lower …Run Code Online (Sandbox Code Playgroud) 我正在使用 webrtc 将 1080p 视频流从一个选项卡发送到同一台计算机上的另一个选项卡(windows10、chrome 76)。而且接收方的视频质量不如发送方。码率只有2400kbps(300kb/s)左右,1080p和720p没有区别。当摄像机移动时,视频分辨率也会降低。
如何提高 webrtc 视频流的质量?
我试图修改 sdp 以增加比特率。http://www.rtcbits.com/2016/11/controlling-bandwidth-usage-in-webrtc.html
放 x-google-max-bitrate
peer.createAnswer().then(sdp => {
var arr = sdp.sdp.split('\r\n');
arr.forEach((str, i) => {
if (/^a=fmtp:\d*/.test(str)) {
arr[i] = str + ';x-google-max-bitrate=28000;x-google-min-bitrate=0;x-google-start-bitrate=20000';
}
});
sdp = new RTCSessionDescription({
type: 'answer',
sdp: arr.join('\r\n'),
})
peer.setLocalDescription(sdp);
socket.emit('message_send', { type: 'answer', sdp: sdp.sdp });
});
Run Code Online (Sandbox Code Playgroud)
输出接收速率(kb/s)
var prevReport = null;
var t = setInterval(function() {
if (!peer) {
prevReport = null;
return;
}
peer.getStats(null).then(reporter => {
reporter.forEach(report => {
if (report.type …Run Code Online (Sandbox Code Playgroud) 摘要:如何使用 WebRTC 原生流式传输高质量视频?
我有一个 1920x1080、大约 30fps 的 h264 流。我目前可以将其从本地主机上的服务器流式传输到本地主机上的本机客户端。
我使用 Google 的 WebRTC 原生库编写了一个 WebRTC 服务器。我编写了一个 VideoEncoder 和 VideoEncoderFactory ,它获取由已编码数据组成的帧,并通过视频轨道广播它。使用此功能,我可以通过管道将 h264 流发送到 WebRTC 服务器,并且可以在浏览器中查看视频流。
然而,只要有东西移动,视频就会损坏。它继续播放,但充满了伪影。最终我发现 WebRTC 丢掉了一些帧。当我在将每个帧传递给 rtc::AdaptedVideoTrackSource::OnFrame 之前将顺序递增的 ID 附加到每个帧并将其记录在 webrtc::VideoEncoder::Encode 中时,我可以看到我的一些帧完全消失了。
这是有道理的,我正在尝试通过用于视频聊天的内容传输高质量视频,并降低帧速率来修复损坏。然而,我并没有要求 WebRTC 库做很多事情,它只是将已经编码的数据转发到本地主机上的客户端。我有一个本机应用程序可以很好地完成此操作,并且我见过一个可以执行此操作的浏览器 WebRTC 客户端。SDP 中是否有字段或某些配置更改允许我流式传输视频?
webrtc ×4
javascript ×2
c++ ×1
cpu ×1
h.264 ×1
html5 ×1
html5-video ×1
performance ×1
real-time ×1
sdp ×1
video ×1
web ×1