Skip to content

Commit

Permalink
support for track subscription permissions (#354)
Browse files Browse the repository at this point in the history
Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Ben Cherry <[email protected]>
  • Loading branch information
3 people authored Feb 5, 2025
1 parent afd10e8 commit 98eb753
Show file tree
Hide file tree
Showing 3 changed files with 60 additions and 1 deletion.
22 changes: 22 additions & 0 deletions examples/publish_hue.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,28 @@ async def main(room: rtc.Room):

asyncio.ensure_future(draw_color_cycle(source))

# uncomment the below to test Track Subscription Permissions
# https://docs.livekit.io/home/client/tracks/publish/#subscription-permissions
# await asyncio.sleep(10)

# logging.info(
# "setting track subscription permissions to False, no one can subscribe to the track"
# )
# room.local_participant.set_track_subscription_permissions(allow_all_participants=False)

# await asyncio.sleep(10)

# logging.info("allowing user to subscribe to the track")
# room.local_participant.set_track_subscription_permissions(
# allow_all_participants=False,
# participant_permissions=[
# rtc.ParticipantTrackPermission(
# participant_identity="allowed-user-identity",
# allow_all=True,
# )
# ],
# )


async def draw_color_cycle(source: rtc.VideoSource):
argb_frame = bytearray(WIDTH * HEIGHT * 4)
Expand Down
8 changes: 7 additions & 1 deletion livekit-rtc/livekit/rtc/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,12 @@
TrackPublishOptions,
VideoEncoding,
)
from ._proto.track_pb2 import StreamState, TrackKind, TrackSource
from ._proto.track_pb2 import (
StreamState,
TrackKind,
TrackSource,
ParticipantTrackPermission,
)
from ._proto.video_frame_pb2 import VideoBufferType, VideoCodec, VideoRotation
from .audio_frame import AudioFrame
from .audio_source import AudioSource
Expand Down Expand Up @@ -97,6 +102,7 @@
"StreamState",
"TrackKind",
"TrackSource",
"ParticipantTrackPermission",
"VideoBufferType",
"VideoRotation",
"stats",
Expand Down
31 changes: 31 additions & 0 deletions livekit-rtc/livekit/rtc/participant.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,9 @@
from ._proto.room_pb2 import (
TranscriptionSegment as ProtoTranscriptionSegment,
)
from ._proto.track_pb2 import (
ParticipantTrackPermission,
)
from ._utils import BroadcastQueue, split_utf8
from .track import LocalTrack
from .track_publication import (
Expand Down Expand Up @@ -398,6 +401,34 @@ def unregister_rpc_method(self, method: str) -> None:

FfiClient.instance.request(req)

def set_track_subscription_permissions(
self,
*,
allow_all_participants: bool,
participant_permissions: Optional[List[ParticipantTrackPermission]] = None,
) -> None:
"""
Set the track subscription permissions for the local participant.
Args:
allow_all_participants (bool): Whether to allow all participants to subscribe to this participant's tracks.
participant_permissions (List[ParticipantTrackPermission]): Participant-specific track subscription permissions, ignored if `allow_all_participants` is True.
"""
if participant_permissions is None:
participant_permissions = []

req = proto_ffi.FfiRequest()
req.set_track_subscription_permissions.local_participant_handle = (
self._ffi_handle.handle
)
req.set_track_subscription_permissions.all_participants_allowed = (
allow_all_participants
)
req.set_track_subscription_permissions.permissions.extend(
participant_permissions
)
FfiClient.instance.request(req)

async def _handle_rpc_method_invocation(
self,
invocation_id: int,
Expand Down

0 comments on commit 98eb753

Please sign in to comment.