diff --git a/examples/publish-wav/index.ts b/examples/publish-wav/index.ts index c41a685d..d23d30c1 100644 --- a/examples/publish-wav/index.ts +++ b/examples/publish-wav/index.ts @@ -64,8 +64,7 @@ while (written < dataSize) { } await source.waitForPlayout(); // release resources allocated for audio publishing -await track.close(); -await source.close(); +await track.close(); // this deallocate source as well await room.disconnect(); diff --git a/packages/livekit-rtc/src/track.ts b/packages/livekit-rtc/src/track.ts index 722e15a2..3b81cec8 100644 --- a/packages/livekit-rtc/src/track.ts +++ b/packages/livekit-rtc/src/track.ts @@ -52,8 +52,11 @@ export abstract class Track { } export class LocalAudioTrack extends Track { - constructor(owned: OwnedTrack) { + private source?: AudioSource; + + constructor(owned: OwnedTrack, source?: AudioSource) { super(owned); + this.source = source; } static createAudioTrack(name: string, source: AudioSource): LocalAudioTrack { @@ -66,13 +69,23 @@ export class LocalAudioTrack extends Track { message: { case: 'createAudioTrack', value: req }, }); - return new LocalAudioTrack(res.track!); + return new LocalAudioTrack(res.track!, source); + } + + async close(closeSource = true) { + await super.close(); + if (closeSource) { + await this.source?.close(); + } } } export class LocalVideoTrack extends Track { - constructor(owned: OwnedTrack) { + private source?: VideoSource; + + constructor(owned: OwnedTrack, source?: VideoSource) { super(owned); + this.source = source; } static createVideoTrack(name: string, source: VideoSource): LocalVideoTrack { @@ -85,7 +98,14 @@ export class LocalVideoTrack extends Track { message: { case: 'createVideoTrack', value: req }, }); - return new LocalVideoTrack(res.track!); + return new LocalVideoTrack(res.track!, source); + } + + async close(closeSource = true) { + await super.close(); + if (closeSource) { + await this.source?.close(); + } } }