Skip to content

Commit 8239876

Browse files
committed
fix: use separate proxy for blackhole drain, support multiple video tracks
- Create a dedicated relay subscription for blackhole drain so it doesn't compete with downstream consumers for frames - Use dicts keyed by track ID instead of single references to support multiple concurrent video tracks
1 parent 7f5dc2e commit 8239876

File tree

1 file changed

+6
-5
lines changed

1 file changed

+6
-5
lines changed

getstream/video/rtc/pc.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -142,8 +142,8 @@ def __init__(
142142

143143
self.track_map = {} # track_id -> (MediaRelay, original_track)
144144
self.video_frame_trackers = {} # track_id -> VideoFrameTracker
145-
self._video_blackhole: Optional[MediaBlackhole] = None
146-
self._video_drain_task: Optional[asyncio.Task] = None
145+
self._video_blackholes: dict[str, MediaBlackhole] = {}
146+
self._video_drain_tasks: dict[str, asyncio.Task] = {}
147147

148148
@self.on("track")
149149
async def on_track(track: aiortc.mediastreams.MediaStreamTrack):
@@ -186,10 +186,11 @@ def _emit_pcm(pcm: PcmData):
186186
# Drain unconsumed video frames to prevent unbounded queue growth
187187
# in RTCRtpReceiver (aiortc issue #554)
188188
if track.kind == "video" and self._drain_video_frames:
189+
drain_proxy = relay.subscribe(tracked_track)
189190
blackhole = MediaBlackhole()
190-
blackhole.addTrack(proxy)
191-
self._video_blackhole = blackhole
192-
self._video_drain_task = asyncio.create_task(blackhole.start())
191+
blackhole.addTrack(drain_proxy)
192+
self._video_blackholes[track.id] = blackhole
193+
self._video_drain_tasks[track.id] = asyncio.create_task(blackhole.start())
193194

194195
self.emit("track_added", proxy, user)
195196

0 commit comments

Comments
 (0)