Skip to content

Commit a5726ae

Browse files
authored
Support mute/unmute for local tracks (#318)
1 parent 6ee3716 commit a5726ae

File tree

2 files changed

+36
-5
lines changed

2 files changed

+36
-5
lines changed

examples/room_example.py

+8-5
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,12 @@
1010

1111
async def main():
1212
logging.basicConfig(level=logging.INFO)
13+
logger = logging.getLogger(__name__)
1314
room = rtc.Room()
1415

1516
@room.on("participant_connected")
1617
def on_participant_connected(participant: rtc.RemoteParticipant):
17-
logging.info(
18+
logger.info(
1819
"participant connected: %s %s", participant.sid, participant.identity
1920
)
2021

@@ -30,15 +31,15 @@ def on_track_subscribed(
3031
publication: rtc.RemoteTrackPublication,
3132
participant: rtc.RemoteParticipant,
3233
):
33-
logging.info("track subscribed: %s", publication.sid)
34+
logger.info("track subscribed: %s", publication.sid)
3435
if track.kind == rtc.TrackKind.KIND_VIDEO:
3536
video_stream = rtc.VideoStream(track)
3637
asyncio.ensure_future(receive_frames(video_stream))
3738

3839
# By default, autosubscribe is enabled. The participant will be subscribed to
3940
# all published tracks in the room
4041
await room.connect(URL, TOKEN)
41-
logging.info("connected to room %s", room.name)
42+
logger.info("connected to room %s", room.name)
4243

4344
for identity, participant in room.remote_participants.items():
4445
print(f"identity: {identity}")
@@ -48,8 +49,10 @@ def on_track_subscribed(
4849
print(f"participant identity: {participant.identity}")
4950
print(f"participant name: {participant.name}")
5051
print(f"participant kind: {participant.kind}")
51-
print(f"participant track publications: {
52-
participant.track_publications}")
52+
print(
53+
f"participant track publications: {
54+
participant.track_publications}"
55+
)
5356
for tid, publication in participant.track_publications.items():
5457
print(f"\ttrack id: {tid}")
5558
print(f"\t\ttrack publication: {publication}")

livekit-rtc/livekit/rtc/track.py

+28
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,20 @@ def create_audio_track(name: str, source: "AudioSource") -> "LocalAudioTrack":
8080
resp = FfiClient.instance.request(req)
8181
return LocalAudioTrack(resp.create_audio_track.track)
8282

83+
def mute(self):
84+
req = proto_ffi.FfiRequest()
85+
req.local_track_mute.track_handle = self._ffi_handle.handle
86+
req.local_track_mute.mute = True
87+
FfiClient.instance.request(req)
88+
self._info.muted = True
89+
90+
def unmute(self):
91+
req = proto_ffi.FfiRequest()
92+
req.local_track_mute.track_handle = self._ffi_handle.handle
93+
req.local_track_mute.mute = False
94+
FfiClient.instance.request(req)
95+
self._info.muted = False
96+
8397
def __repr__(self) -> str:
8498
return f"rtc.LocalAudioTrack(sid={self.sid}, name={self.name})"
8599

@@ -97,6 +111,20 @@ def create_video_track(name: str, source: "VideoSource") -> "LocalVideoTrack":
97111
resp = FfiClient.instance.request(req)
98112
return LocalVideoTrack(resp.create_video_track.track)
99113

114+
def mute(self):
115+
req = proto_ffi.FfiRequest()
116+
req.local_track_mute.track_handle = self._ffi_handle.handle
117+
req.local_track_mute.mute = True
118+
FfiClient.instance.request(req)
119+
self._info.muted = True
120+
121+
def unmute(self):
122+
req = proto_ffi.FfiRequest()
123+
req.local_track_mute.track_handle = self._ffi_handle.handle
124+
req.local_track_mute.mute = False
125+
FfiClient.instance.request(req)
126+
self._info.muted = False
127+
100128
def __repr__(self) -> str:
101129
return f"rtc.LocalVideoTrack(sid={self.sid}, name={self.name})"
102130

0 commit comments

Comments
 (0)