I want to replace the audio track of an RTCRtpSender, so I use 'replaceTrack' method of RTCRtpSender, but I found that this method only works if I use 'addTrack' of RTCPeerConnection to add local audio track to it firstly, if I use 'addStream' to add the whole stream got from 'getUserMedia', then 'replaceTrack' will not work, and it cause audio track stopped(Remote peer will not get any audio anymore).My code is like this:
1.Use 'addStream':
navigator.mediaDevices.getUserMedia({audio:true}).then(function(oldStream){
pc.addStream(oldStream);
oldStream.getAudioTracks()[0].stop();
navigator.mediaDevices.getUserMedia({audio:true}).then(function(newStream){
var newAudioTrack = newStream.getAudioTracks()[0];
var sender = pc.getSenders().find(function (s) {
return s.track.kind == newAudioTrack.kind;
});
sender.replaceTrack(newAudioTrack);
});
});
2.Use 'addTrack':
navigator.mediaDevices.getUserMedia({audio:true}).then(function(oldStream){
pc.addTrack(oldStream.getAudioTracks()[0], oldStream);
oldStream.getAudioTracks()[0].stop();
navigator.mediaDevices.getUserMedia({audio:true}).then(function(newStream){
var newAudioTrack = newStream.getAudioTracks()[0];
var sender = pc.getSenders().find(function (s) {
return s.track.kind == newAudioTrack.kind;
});
sender.replaceTrack(newAudioTrack);
});
});