在webrtc中实时控制视频发送帧速率
Control video send framerate on the fly in webrtc
现在我使用offer SDP中的b=AS:1000来设置上游视频的上限(即1Mbps),以控制我发送到远程对等端的视频量。我正在研究一种不同的方法,所以我想知道是否有一种方法可以控制当前活动视频会话的视频帧速率?
编辑:我发现getUserMedia支持minFrameRate和maxFrameRate参数。因此,当我的对等连接处于会话中时,我可以调用getUserMedia吗?另一个类似的用例是,当我已经在进行同伴会话时,可以更换相机,这是合理的吗?无需重新协商SDP、ICE。。。这可行吗?
你问了几个问题,当这个答案第一次写出来时,大多数问题的简短答案是:还没有(尽管由于下面DJ House的回答,我已经更新了它!)。
应用约束
您应该能够在活动会话期间使用类似以下的applyConstraints来更改约束:
const videotrack = stream_from_getUserMedia.getVideoTracks()[0];
videotrack.applyConstraints({ frameRate: { max: 10 } });
如今的大多数实现都能够大幅降低帧速率,而不仅仅是提供相机中可用的模式。
试试这把小提琴。
RTCRtpSender
你应该能够控制编码&使用setParameters:在发送方对象中传输
const pc = RTCPeerConnection(config);
const videotrack = stream.getVideoTracks()[0];
const sender = pc.addTrack(videotrack, stream);
// get the current parameters first
const params = sender.getParameters();
if (!params.encodings) params.encodings = [{}]; // Firefox workaround!
params.encodings[0].maxBitrate = 60000;
params.encodings[0].scaleResolutionDownBy = 2;
sender.setParameters(params);
encodings
是一个数组,但除非使用联播,否则只有一个条目。
试试这把小提琴!(在Chrome、Firefox、Safari和Edge中测试!)
RTCRtpSend.replaceTrack
您还应该能够在正在进行的对等会话中替换相机轨迹,如下所示:
const videotrack2 = a_different_stream.getVideoTracks()[0];
await sender.replaceTrack(videotrack2);
它改变了遥控器看到的东西,而没有改变这一端的东西。试试这把小提琴。
对于任何像我一样(5年后)来到这里的人,我需要在设置参数之前获取参数。我认为,由于这是一个如此古老的问题,API只是有点过时了。
在没有先获取参数的情况下,我总是会出现以下错误:
Failed to execute 'setParameters' on 'RTCRtpSender': required member codecs is undefined.
以下是获取和操作当前参数的快速方法:
var pc = RTCPeerConnection(config);
var videotrack = stream.getVideoTracks()[0];
var sender = pc.addTrack(videotrack, stream);
// get the current parameters first
var params = sender.getParameters();
params.encodings[0].maxBitrate = 60000;
params.encodings[0].scaleResolutionDownBy = 2;
sender.setParameters(params);
对于我来说,这仍然是一个很好的答案,可以快速调试一些与Webrtc带宽相关的问题。
- 在webrtc中实时控制视频发送帧速率
- 动画的可接受帧速率有多高
- Html5视频帧准确
- 如何在javascript中将小数转换为帧速率指定
- PHP - 在视频上传期间提取帧
- 更改纸张中的帧速率.js
- 动态.JS精灵表帧速率在每个事件上加倍
- Nodejs - 防止 socket.io 降低帧速率
- 在javascript中获取视频的帧速率
- 在javascript中获取用户的帧速率
- 从单独下载的 JPEG 创建影片时帧速率太慢
- 当 iframe 位于视口中时,如何获得低帧速率
- Javascript - 无法调整帧速率 - 请求动画帧
- JS 请求动画帧帧速率
- 我可以查询requestAnimationFrame帧速率上限吗
- 尽管在WebGL中进行了优化,但帧速率较低
- 以有限的帧速率请求动画帧
- CreateJS:Firefox中的帧速率很差/很奇怪
- 在画布上播放精灵表比帧速率慢
- 有没有可能在javascript中找到监视器帧速率是多少