Skip to content

Commit

Permalink
Improve track handling
Browse files Browse the repository at this point in the history
  • Loading branch information
havfo committed Mar 15, 2024
1 parent af5b08e commit 53166ad
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 29 deletions.
24 changes: 0 additions & 24 deletions src/store/actions/mediaActions.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -428,9 +428,6 @@ export const updateMic = ({ newDeviceId }: UpdateDeviceOptions = {}): AppThunk<P
} else {
await mediaService.mediaSenders['mic'].start({
track,
stopTracks: false,
disableTrackOnPause: false,
zeroRtpOnPause: true,
codecOptions: {
opusStereo: opusStereo,
opusFec: opusFec,
Expand Down Expand Up @@ -603,19 +600,13 @@ export const updateWebcam = ({ newDeviceId }: UpdateDeviceOptions = {}): AppThun

await mediaService.mediaSenders['webcam'].start({
track,
stopTracks: false,
disableTrackOnPause: false,
zeroRtpOnPause: true,
encodings,
codecOptions: { videoGoogleStartBitrate: 1000 },
appData: { source: 'webcam' }
});
} else {
await mediaService.mediaSenders['webcam'].start({
track,
stopTracks: false,
disableTrackOnPause: false,
zeroRtpOnPause: true,
appData: { source: 'webcam' }
});
}
Expand Down Expand Up @@ -753,9 +744,6 @@ export const updateScreenSharing = (): AppThunk<Promise<void>> => async (

await mediaService.mediaSenders['screen'].start({
track: videoTrack,
stopTracks: false,
disableTrackOnPause: false,
zeroRtpOnPause: true,
encodings,
codecOptions: {
videoGoogleStartBitrate: 1000
Expand All @@ -765,9 +753,6 @@ export const updateScreenSharing = (): AppThunk<Promise<void>> => async (
} else {
await mediaService.mediaSenders['screen'].start({
track: videoTrack,
stopTracks: false,
disableTrackOnPause: false,
zeroRtpOnPause: true,
codecOptions: {
videoGoogleStartBitrate: 1000
},
Expand All @@ -782,9 +767,6 @@ export const updateScreenSharing = (): AppThunk<Promise<void>> => async (
if (audioTrack) {
await mediaService.mediaSenders['screenaudio'].start({
track: audioTrack,
stopTracks: false,
disableTrackOnPause: false,
zeroRtpOnPause: true,
codecOptions: {
opusStereo: opusStereo,
opusFec: opusFec,
Expand Down Expand Up @@ -897,19 +879,13 @@ 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' }
});
} else {
await mediaService.mediaSenders['extravideo'].start({
track,
stopTracks: false,
disableTrackOnPause: false,
zeroRtpOnPause: true,
appData: { source: 'extravideo' }
});
}
Expand Down
22 changes: 17 additions & 5 deletions src/utils/mediaSender.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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)
});

Expand Down Expand Up @@ -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)
});

Expand Down Expand Up @@ -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;
Expand Down

0 comments on commit 53166ad

Please sign in to comment.