Skip to content

Commit 98eb753

Browse files
davidzhaogithub-actions[bot]bcherry
authored
support for track subscription permissions (#354)
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Ben Cherry <[email protected]>
1 parent afd10e8 commit 98eb753

File tree

3 files changed

+60
-1
lines changed

3 files changed

+60
-1
lines changed

examples/publish_hue.py

+22
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,28 @@ async def main(room: rtc.Room):
5252

5353
asyncio.ensure_future(draw_color_cycle(source))
5454

55+
# uncomment the below to test Track Subscription Permissions
56+
# https://docs.livekit.io/home/client/tracks/publish/#subscription-permissions
57+
# await asyncio.sleep(10)
58+
59+
# logging.info(
60+
# "setting track subscription permissions to False, no one can subscribe to the track"
61+
# )
62+
# room.local_participant.set_track_subscription_permissions(allow_all_participants=False)
63+
64+
# await asyncio.sleep(10)
65+
66+
# logging.info("allowing user to subscribe to the track")
67+
# room.local_participant.set_track_subscription_permissions(
68+
# allow_all_participants=False,
69+
# participant_permissions=[
70+
# rtc.ParticipantTrackPermission(
71+
# participant_identity="allowed-user-identity",
72+
# allow_all=True,
73+
# )
74+
# ],
75+
# )
76+
5577

5678
async def draw_color_cycle(source: rtc.VideoSource):
5779
argb_frame = bytearray(WIDTH * HEIGHT * 4)

livekit-rtc/livekit/rtc/__init__.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,12 @@
2727
TrackPublishOptions,
2828
VideoEncoding,
2929
)
30-
from ._proto.track_pb2 import StreamState, TrackKind, TrackSource
30+
from ._proto.track_pb2 import (
31+
StreamState,
32+
TrackKind,
33+
TrackSource,
34+
ParticipantTrackPermission,
35+
)
3136
from ._proto.video_frame_pb2 import VideoBufferType, VideoCodec, VideoRotation
3237
from .audio_frame import AudioFrame
3338
from .audio_source import AudioSource
@@ -97,6 +102,7 @@
97102
"StreamState",
98103
"TrackKind",
99104
"TrackSource",
105+
"ParticipantTrackPermission",
100106
"VideoBufferType",
101107
"VideoRotation",
102108
"stats",

livekit-rtc/livekit/rtc/participant.py

+31
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@
3131
from ._proto.room_pb2 import (
3232
TranscriptionSegment as ProtoTranscriptionSegment,
3333
)
34+
from ._proto.track_pb2 import (
35+
ParticipantTrackPermission,
36+
)
3437
from ._utils import BroadcastQueue, split_utf8
3538
from .track import LocalTrack
3639
from .track_publication import (
@@ -398,6 +401,34 @@ def unregister_rpc_method(self, method: str) -> None:
398401

399402
FfiClient.instance.request(req)
400403

404+
def set_track_subscription_permissions(
405+
self,
406+
*,
407+
allow_all_participants: bool,
408+
participant_permissions: Optional[List[ParticipantTrackPermission]] = None,
409+
) -> None:
410+
"""
411+
Set the track subscription permissions for the local participant.
412+
413+
Args:
414+
allow_all_participants (bool): Whether to allow all participants to subscribe to this participant's tracks.
415+
participant_permissions (List[ParticipantTrackPermission]): Participant-specific track subscription permissions, ignored if `allow_all_participants` is True.
416+
"""
417+
if participant_permissions is None:
418+
participant_permissions = []
419+
420+
req = proto_ffi.FfiRequest()
421+
req.set_track_subscription_permissions.local_participant_handle = (
422+
self._ffi_handle.handle
423+
)
424+
req.set_track_subscription_permissions.all_participants_allowed = (
425+
allow_all_participants
426+
)
427+
req.set_track_subscription_permissions.permissions.extend(
428+
participant_permissions
429+
)
430+
FfiClient.instance.request(req)
431+
401432
async def _handle_rpc_method_invocation(
402433
self,
403434
invocation_id: int,

0 commit comments

Comments
 (0)