你问了几个问题,当第一次写这个答案时,大多数人的简短回答是:还没有 (虽然我已经更新了它,感谢 DJ房子的answer below!)。
应用约束
您应该能够在活动会话期间更改约束,使用 applyConstraints,如下所示:
const videotrack = stream_from_getUserMedia.getVideoTracks()[0];
videotrack.applyConstraints({ frameRate: { max: 10 } });
当今的大多数实现都能够降低帧速率,而不仅仅是提供相机中可用的模式。
试试this fiddle。
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 是一个数组,但除非使用联播,否则只有一个条目。
试试this fiddle! (在 Chrome、Firefox、Safari 和 Edge 中测试!)
RTCRtpSender.replaceTrack
您还应该能够在正在进行的对等会话中替换摄像头轨迹,如下所示:
const videotrack2 = a_different_stream.getVideoTracks()[0];
await sender.replaceTrack(videotrack2);
它改变了遥控器看到的东西,而不改变这端的东西。试试this fiddle。