From c454e1acbac6dc55c53ff6c907d0ec02b318c38f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?The=CC=81o=20Monnom?= Date: Thu, 13 Mar 2025 14:28:09 +0100 Subject: [PATCH 1/4] Update track_publication.py --- livekit-rtc/livekit/rtc/track_publication.py | 24 ++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/livekit-rtc/livekit/rtc/track_publication.py b/livekit-rtc/livekit/rtc/track_publication.py index 86b930f7..77867e3a 100644 --- a/livekit-rtc/livekit/rtc/track_publication.py +++ b/livekit-rtc/livekit/rtc/track_publication.py @@ -12,22 +12,26 @@ # See the License for the specific language governing permissions and # limitations under the License. -from typing import Optional +from typing import Optional, cast import asyncio from ._ffi_client import FfiHandle, FfiClient from ._proto import e2ee_pb2 as proto_e2ee from ._proto import ffi_pb2 as proto_ffi from ._proto import track_pb2 as proto_track -from .track import Track +from .track import Track, LocalTrack, RemoteTrack class TrackPublication: def __init__(self, owned_info: proto_track.OwnedTrackPublication): self._info = owned_info.info - self.track: Optional[Track] = None + self._track: Optional[Track] = None self._ffi_handle = FfiHandle(owned_info.handle.id) + @property + def track(self) -> Optional[Track]: + return self._track + @property def sid(self) -> str: return self._info.sid @@ -74,6 +78,10 @@ def __init__(self, owned_info: proto_track.OwnedTrackPublication): super().__init__(owned_info) self._first_subscription: asyncio.Future[None] = asyncio.Future() + @property + def track(self) -> Optional[LocalTrack]: + return cast(Optional[LocalTrack], self._track) + async def wait_for_subscription(self) -> None: await asyncio.shield(self._first_subscription) @@ -84,7 +92,15 @@ def __repr__(self) -> str: class RemoteTrackPublication(TrackPublication): def __init__(self, owned_info: proto_track.OwnedTrackPublication): super().__init__(owned_info) - self.subscribed = False + self._subscribed = False + + @property + def track(self) -> Optional[RemoteTrack]: + return cast(Optional[RemoteTrack], self._track) + + @property + def subscribed(self) -> bool: + return self._subscribed def set_subscribed(self, subscribed: bool): req = proto_ffi.FfiRequest() From f8fd676becf688ba026da4feb4de1ed5d5e5a6eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?The=CC=81o=20Monnom?= Date: Thu, 13 Mar 2025 14:30:58 +0100 Subject: [PATCH 2/4] fix --- livekit-rtc/livekit/rtc/participant.py | 4 ++-- livekit-rtc/livekit/rtc/room.py | 10 +++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/livekit-rtc/livekit/rtc/participant.py b/livekit-rtc/livekit/rtc/participant.py index 5bd1f205..cee74375 100644 --- a/livekit-rtc/livekit/rtc/participant.py +++ b/livekit-rtc/livekit/rtc/participant.py @@ -704,7 +704,7 @@ async def publish_track( raise PublishTrackError(cb.publish_track.error) track_publication = LocalTrackPublication(cb.publish_track.publication) - track_publication.track = track + track_publication._track = track track._info.sid = track_publication.sid self._track_publications[track_publication.sid] = track_publication @@ -739,7 +739,7 @@ async def unpublish_track(self, track_sid: str) -> None: raise UnpublishTrackError(cb.unpublish_track.error) publication = self._track_publications.pop(track_sid) - publication.track = None + publication._track = None queue.task_done() finally: self._room_queue.unsubscribe(queue) diff --git a/livekit-rtc/livekit/rtc/room.py b/livekit-rtc/livekit/rtc/room.py index db0f92bf..75cc50dc 100644 --- a/livekit-rtc/livekit/rtc/room.py +++ b/livekit-rtc/livekit/rtc/room.py @@ -535,22 +535,22 @@ def _on_room_event(self, event: proto_room.RoomEvent): track_info = owned_track_info.info rparticipant = self._remote_participants[event.track_subscribed.participant_identity] rpublication = rparticipant.track_publications[track_info.sid] - rpublication.subscribed = True + rpublication._subscribed = True if track_info.kind == TrackKind.KIND_VIDEO: remote_video_track = RemoteVideoTrack(owned_track_info) - rpublication.track = remote_video_track + rpublication._track = remote_video_track self.emit("track_subscribed", remote_video_track, rpublication, rparticipant) elif track_info.kind == TrackKind.KIND_AUDIO: remote_audio_track = RemoteAudioTrack(owned_track_info) - rpublication.track = remote_audio_track + rpublication._track = remote_audio_track self.emit("track_subscribed", remote_audio_track, rpublication, rparticipant) elif which == "track_unsubscribed": identity = event.track_unsubscribed.participant_identity rparticipant = self._remote_participants[identity] rpublication = rparticipant.track_publications[event.track_unsubscribed.track_sid] track = rpublication.track - rpublication.track = None - rpublication.subscribed = False + rpublication._track = None + rpublication._subscribed = False self.emit("track_unsubscribed", track, rpublication, rparticipant) elif which == "track_subscription_failed": identity = event.track_subscription_failed.participant_identity From 3bf1822343bd15de140107ac3bebbfdc5f7e3537 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?The=CC=81o=20Monnom?= Date: Thu, 13 Mar 2025 14:33:01 +0100 Subject: [PATCH 3/4] better room repr --- livekit-rtc/livekit/rtc/room.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/livekit-rtc/livekit/rtc/room.py b/livekit-rtc/livekit/rtc/room.py index 75cc50dc..9d27ce4b 100644 --- a/livekit-rtc/livekit/rtc/room.py +++ b/livekit-rtc/livekit/rtc/room.py @@ -828,4 +828,4 @@ def __repr__(self) -> str: if self._first_sid_future.done(): sid = self._first_sid_future.result() - return f"rtc.Room(sid={sid}, name={self.name}, metadata={self.metadata}, connection_state={self._connection_state})" + return f"rtc.Room(sid={sid}, name={self.name}, metadata={self.metadata}, connection_state={ConnectionState.Name(self._connection_state)})" From c3296b3880e0f0b968a4aa1a965f9cd314cfe6dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?The=CC=81o=20Monnom?= Date: Thu, 13 Mar 2025 14:36:48 +0100 Subject: [PATCH 4/4] fix --- livekit-rtc/livekit/rtc/room.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/livekit-rtc/livekit/rtc/room.py b/livekit-rtc/livekit/rtc/room.py index 9d27ce4b..1a6cf622 100644 --- a/livekit-rtc/livekit/rtc/room.py +++ b/livekit-rtc/livekit/rtc/room.py @@ -508,8 +508,8 @@ def _on_room_event(self, event: proto_room.RoomEvent): elif which == "local_track_published": sid = event.local_track_published.track_sid lpublication = self.local_participant.track_publications[sid] - track = lpublication.track - self.emit("local_track_published", lpublication, track) + ltrack = lpublication.track + self.emit("local_track_published", lpublication, ltrack) elif which == "local_track_unpublished": sid = event.local_track_unpublished.publication_sid lpublication = self.local_participant.track_publications[sid] @@ -548,10 +548,10 @@ def _on_room_event(self, event: proto_room.RoomEvent): identity = event.track_unsubscribed.participant_identity rparticipant = self._remote_participants[identity] rpublication = rparticipant.track_publications[event.track_unsubscribed.track_sid] - track = rpublication.track + rtrack = rpublication.track rpublication._track = None rpublication._subscribed = False - self.emit("track_unsubscribed", track, rpublication, rparticipant) + self.emit("track_unsubscribed", rtrack, rpublication, rparticipant) elif which == "track_subscription_failed": identity = event.track_subscription_failed.participant_identity rparticipant = self._remote_participants[identity]