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;