我想在重新协商时使用自己的流。标准方法是将 media 参数传递给 createOffer 函数。在这种情况下,Janus 处理 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.
在添加新流之前,我是否必须执行一些其他功能?