未捕获(承诺)DOMException:在 setParameters() 中修改的只读字段
Uncaught (in promise) DOMException: Read-only field modified in setParameters()
这是我的代码
function createPeer(userID) {
const peer = new RTCPeerConnection({
iceServers: [
{
urls: "stun:stun.stunprotocol.org"
},
{
urls: 'turn:numb.viagenie.ca',
credential: 'redacted',
username: 'webrtc@live.com'
},
]
});
peer.onicecandidate = () => { };
peer.ontrack = () => { };
peer.onnegotiationneeded = () => { };
return peer;
}
navigator.mediaDevices.getUserMedia({ video: true, audio: true }).then(stream => {
const peer = createPeer();
peer.getSenders();
stream.getTracks().forEach(track => peer.addTrack(track, stream));
peer.getSenders().forEach(sender => {
if (sender.track.kind === "video") {
const params = sender.getParameters();
params.encodings.push({
maxBitrate: 100
});
sender.setParameters(params);
}
})
});
我不明白为什么会出现错误
Uncaught (in promise) DOMException: Read-only field modified in setParameters().
我认为比特率是我可以改变的。此外,我正在通过调用 sender.getParameters();
来更改我获得的参数,这是 mdn docs 所说的。
我哪里错了?
您正在向数组添加新编码,而不是修改现有编码。您需要等到协商完成后(您应用了答案),然后执行:
peer.getSenders().forEach(sender => {
if (sender.track.kind === 'video') {
let params = sender.getParameters();
params.encodings.forEach(e => {
e.maxBitrate = 100;
});
sender.setParameters(params);
}
})
这是我的代码
function createPeer(userID) {
const peer = new RTCPeerConnection({
iceServers: [
{
urls: "stun:stun.stunprotocol.org"
},
{
urls: 'turn:numb.viagenie.ca',
credential: 'redacted',
username: 'webrtc@live.com'
},
]
});
peer.onicecandidate = () => { };
peer.ontrack = () => { };
peer.onnegotiationneeded = () => { };
return peer;
}
navigator.mediaDevices.getUserMedia({ video: true, audio: true }).then(stream => {
const peer = createPeer();
peer.getSenders();
stream.getTracks().forEach(track => peer.addTrack(track, stream));
peer.getSenders().forEach(sender => {
if (sender.track.kind === "video") {
const params = sender.getParameters();
params.encodings.push({
maxBitrate: 100
});
sender.setParameters(params);
}
})
});
我不明白为什么会出现错误
Uncaught (in promise) DOMException: Read-only field modified in setParameters().
我认为比特率是我可以改变的。此外,我正在通过调用 sender.getParameters();
来更改我获得的参数,这是 mdn docs 所说的。
我哪里错了?
您正在向数组添加新编码,而不是修改现有编码。您需要等到协商完成后(您应用了答案),然后执行:
peer.getSenders().forEach(sender => {
if (sender.track.kind === 'video') {
let params = sender.getParameters();
params.encodings.forEach(e => {
e.maxBitrate = 100;
});
sender.setParameters(params);
}
})