Я хочу использовать свой собственный поток при повторном согласовании.Стандартный способ - передать параметр media в функцию createOffer.В этом случае Янус обрабатывает запрос getUserMedia.
async switchCamera() {
this.videoCall.createOffer({
media: {
replaceVideo: true
},
success: (jsep) => {
this.videoCall.send({message: {request:"set"}, "jsep": jsep});
},
error: (e) => {
alert(e);
}
});
}
В моем случае я хочу сделать это самостоятельно.Я создал следующую функцию:
async switchCamera() {
cameraHelper.switchCamera(); // Sets facing mode
this.localStream = await cameraHelper.requestMedia(); // Returns media stream
this.videoCall.createOffer({
stream: this.localStream,
success: (jsep) => {
this.videoCall.send({message: {request:"set"}, "jsep": jsep});
},
error: (e) => {
alert(e);
}
});
}
Если я вызываю функцию switchCamera, Chrome падает на стороне приемника.Последнее сообщение об ошибке перед сбоем следующее:
Uncaught DOMException: Failed to execute 'addTrack' on 'RTCPeerConnection': A sender already exists for the track.
Должен ли я выполнять некоторые другие функции, прежде чем я смогу добавить новый поток?