Skip to content

Commit 9e77c6a

Browse files
authored
feat(livekit-rtc): Add closeSource = true default parameter to local tracks (#495)
* implement closeSource = true to LocalTrack * fix example
1 parent e1a0780 commit 9e77c6a

2 files changed

Lines changed: 25 additions & 6 deletions

File tree

examples/publish-wav/index.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,8 +64,7 @@ while (written < dataSize) {
6464
}
6565
await source.waitForPlayout();
6666
// release resources allocated for audio publishing
67-
await track.close();
68-
await source.close();
67+
await track.close(); // this deallocate source as well
6968

7069
await room.disconnect();
7170

packages/livekit-rtc/src/track.ts

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,8 +52,11 @@ export abstract class Track {
5252
}
5353

5454
export class LocalAudioTrack extends Track {
55-
constructor(owned: OwnedTrack) {
55+
private source?: AudioSource;
56+
57+
constructor(owned: OwnedTrack, source?: AudioSource) {
5658
super(owned);
59+
this.source = source;
5760
}
5861

5962
static createAudioTrack(name: string, source: AudioSource): LocalAudioTrack {
@@ -66,13 +69,23 @@ export class LocalAudioTrack extends Track {
6669
message: { case: 'createAudioTrack', value: req },
6770
});
6871

69-
return new LocalAudioTrack(res.track!);
72+
return new LocalAudioTrack(res.track!, source);
73+
}
74+
75+
async close(closeSource = true) {
76+
await super.close();
77+
if (closeSource) {
78+
await this.source?.close();
79+
}
7080
}
7181
}
7282

7383
export class LocalVideoTrack extends Track {
74-
constructor(owned: OwnedTrack) {
84+
private source?: VideoSource;
85+
86+
constructor(owned: OwnedTrack, source?: VideoSource) {
7587
super(owned);
88+
this.source = source;
7689
}
7790

7891
static createVideoTrack(name: string, source: VideoSource): LocalVideoTrack {
@@ -85,7 +98,14 @@ export class LocalVideoTrack extends Track {
8598
message: { case: 'createVideoTrack', value: req },
8699
});
87100

88-
return new LocalVideoTrack(res.track!);
101+
return new LocalVideoTrack(res.track!, source);
102+
}
103+
104+
async close(closeSource = true) {
105+
await super.close();
106+
if (closeSource) {
107+
await this.source?.close();
108+
}
89109
}
90110
}
91111

0 commit comments

Comments
 (0)