diff --git a/src/store/actions/mediaActions.tsx b/src/store/actions/mediaActions.tsx index 6453f48b..861721b4 100644 --- a/src/store/actions/mediaActions.tsx +++ b/src/store/actions/mediaActions.tsx @@ -428,9 +428,6 @@ export const updateMic = ({ newDeviceId }: UpdateDeviceOptions = {}): AppThunk

> => async ( await mediaService.mediaSenders['screen'].start({ track: videoTrack, - stopTracks: false, - disableTrackOnPause: false, - zeroRtpOnPause: true, encodings, codecOptions: { videoGoogleStartBitrate: 1000 @@ -765,9 +753,6 @@ export const updateScreenSharing = (): AppThunk> => async ( } else { await mediaService.mediaSenders['screen'].start({ track: videoTrack, - stopTracks: false, - disableTrackOnPause: false, - zeroRtpOnPause: true, codecOptions: { videoGoogleStartBitrate: 1000 }, @@ -782,9 +767,6 @@ export const updateScreenSharing = (): AppThunk> => async ( if (audioTrack) { await mediaService.mediaSenders['screenaudio'].start({ track: audioTrack, - stopTracks: false, - disableTrackOnPause: false, - zeroRtpOnPause: true, codecOptions: { opusStereo: opusStereo, opusFec: opusFec, @@ -897,9 +879,6 @@ export const startExtraVideo = ({ newDeviceId }: UpdateDeviceOptions = {}): AppT await mediaService.mediaSenders['extravideo'].start({ track, - stopTracks: false, - disableTrackOnPause: false, - zeroRtpOnPause: true, encodings, codecOptions: { videoGoogleStartBitrate: 1000 }, appData: { source: 'extravideo' } @@ -907,9 +886,6 @@ export const startExtraVideo = ({ newDeviceId }: UpdateDeviceOptions = {}): AppT } else { await mediaService.mediaSenders['extravideo'].start({ track, - stopTracks: false, - disableTrackOnPause: false, - zeroRtpOnPause: true, appData: { source: 'extravideo' } }); } diff --git a/src/utils/mediaSender.tsx b/src/utils/mediaSender.tsx index 613a6160..546cb994 100644 --- a/src/utils/mediaSender.tsx +++ b/src/utils/mediaSender.tsx @@ -276,14 +276,14 @@ export class MediaSender extends EventEmitter { this.handleTrack(); this.maybeAddHark(); - await this.producer?.replaceTrack({ track }); + await this.producer?.replaceTrack({ track: this.track?.clone() ?? null }); for (const producer of this.peerProducers.values()) { - await producer.replaceTrack({ track }); + await producer.replaceTrack({ track: this.track?.clone() ?? null }); } for (const producerPromise of this.peerProducingPromises.values()) { - await producerPromise.then((producer) => producer.replaceTrack({ track: this.track })); + await producerPromise.then((producer) => producer.replaceTrack({ track: this.track?.clone() ?? null })); } oldTrack?.stop(); @@ -296,8 +296,13 @@ export class MediaSender extends EventEmitter { if (!this.mediaService.sendTransport) throw new Error('Send transport not ready'); - const producer = await this.mediaService.sendTransport.produce({ + const producerOptions = { ...this.producerOptions, + track: this.track?.clone() + }; + + const producer = await this.mediaService.sendTransport.produce({ + ...producerOptions, codec: this.mediaService.mediasoup?.rtpCapabilities.codecs?.find((c) => c.mimeType.toLowerCase() === this.codec) }); @@ -335,9 +340,14 @@ export class MediaSender extends EventEmitter { peerProducingPromise = (async () => { const peerDevice = this.mediaService.getPeerDevice(peerId); const transport = await this.mediaService.getPeerTransport(peerId, 'send'); + + const producerOptions = { + ...this.producerOptions, + track: this.track?.clone() + }; const producer = await transport.produce({ - ...this.producerOptions, + ...producerOptions, codec: peerDevice.rtpCapabilities.codecs?.find((c) => c.mimeType.toLowerCase() === this.codec) }); @@ -370,6 +380,8 @@ export class MediaSender extends EventEmitter { producer.observer.on('pause', pauseListener); producer.observer.on('resume', resumeListener); + if (this.paused) producer.pause(); + this.peerProducingPromises.delete(peerId); return producer;