Skip to content

Commit 0e37370

Browse files
committed
feat: call _on_stream_info_updated with parent room reference on audio_stream
1 parent 1704332 commit 0e37370

2 files changed

Lines changed: 27 additions & 31 deletions

File tree

livekit-rtc/livekit/rtc/audio_stream.py

Lines changed: 19 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import asyncio
1818
import json
19+
import weakref
1920
from dataclasses import dataclass
2021
from typing import TYPE_CHECKING, Any, AsyncIterator, Optional
2122

@@ -105,7 +106,9 @@ def __init__(
105106
```
106107
"""
107108
self._track: Track | None = track
108-
self._room: Room | None = room
109+
self._room_ref: "Optional[weakref.ref[Room]]" = (
110+
weakref.ref(room) if room is not None else None
111+
)
109112
print("ROOM:", room)
110113
self._sample_rate = sample_rate
111114
self._num_channels = num_channels
@@ -246,44 +249,33 @@ def from_track(
246249
)
247250

248251
def _set_room(self, room: Optional["Room"]) -> None:
249-
self._room = room
252+
self._room_ref = weakref.ref(room) if room is not None else None
250253
print("ROOM UPDATE:", room)
251254

252-
@property
253-
def room(self) -> Optional["Room"]:
254-
return self._room
255-
256-
@property
257-
def room_name(self) -> Optional[str]:
258-
return self._room.name if self._room is not None else None
259-
260-
@property
261-
def participant_identity(self) -> Optional[str]:
262-
pub = self._find_publication()
263-
if pub is None:
264-
return None
265-
identity, _ = pub
266-
return identity
255+
if self._processor:
256+
room = self._resolve_room()
257+
participant_identity, publication_sid = self._find_publication() or ("", "")
258+
self._processor._on_stream_info_updated(
259+
room_name=room.name if room is not None else "", # FIXME: default value?
260+
participant_identity=participant_identity,
261+
publication_sid=publication_sid,
262+
)
267263

268-
@property
269-
def publication_sid(self) -> Optional[str]:
270-
pub = self._find_publication()
271-
if pub is None:
272-
return None
273-
_, sid = pub
274-
return sid
264+
def _resolve_room(self) -> Optional["Room"]:
265+
return self._room_ref() if self._room_ref is not None else None
275266

276267
def _find_publication(self) -> Optional[tuple[str, str]]:
277-
if self._room is None or self._track is None:
268+
room = self._resolve_room()
269+
if room is None or self._track is None:
278270
return None
279271
track_sid = self._track.sid
280272
if not track_sid:
281273
return None
282-
for participant in self._room.remote_participants.values():
274+
for participant in room.remote_participants.values():
283275
publication = participant.track_publications.get(track_sid)
284276
if publication is not None:
285277
return participant.identity, publication.sid
286-
local = self._room._local_participant
278+
local = room._local_participant
287279
if local is not None:
288280
for publication in local.track_publications.values():
289281
if publication.sid == track_sid:

livekit-rtc/livekit/rtc/track.py

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,22 @@ class Track:
3030
def __init__(self, owned_info: proto_track.OwnedTrack):
3131
self._info = owned_info.info
3232
self._ffi_handle = FfiHandle(owned_info.handle.id)
33-
self._room: Optional["Room"] = None
33+
self._room_ref: "Optional[weakref.ref[Room]]" = None
3434
self._audio_streams: "weakref.WeakSet[AudioStream]" = weakref.WeakSet()
3535

36+
def _resolve_room(self) -> Optional["Room"]:
37+
return self._room_ref() if self._room_ref is not None else None
38+
3639
def _set_room(self, room: Optional["Room"]) -> None:
37-
self._room = room
40+
self._room_ref = weakref.ref(room) if room is not None else None
3841
for stream in self._audio_streams:
3942
stream._set_room(room)
4043

4144
def _register_audio_stream(self, stream: "AudioStream") -> None:
4245
self._audio_streams.add(stream)
43-
if self._room is not None:
44-
stream._set_room(self._room)
46+
room = self._resolve_room()
47+
if room is not None:
48+
stream._set_room(room)
4549

4650
def _unregister_audio_stream(self, stream: "AudioStream") -> None:
4751
self._audio_streams.discard(stream)

0 commit comments

Comments
 (0)