Skip to content

Commit f6a602a

Browse files
committed
parse_video_track_id. Fix is_started
1 parent 93552a3 commit f6a602a

File tree

2 files changed

+17
-7
lines changed

2 files changed

+17
-7
lines changed

src/teleoprtc/stream.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@
77
import aiortc
88
from aiortc.contrib.media import MediaRelay
99

10+
from teleoprtc.tracks import parse_video_track_id
11+
1012

1113
@dataclasses.dataclass
1214
class StreamingOffer:
@@ -123,11 +125,7 @@ def _on_connectionstatechange(self):
123125
def _on_incoming_track(self, track: aiortc.MediaStreamTrack):
124126
self._log_debug("got track: %s %s", track.kind, track.id)
125127
if track.kind == "video":
126-
parts = track.id.split(":") # format: "camera_type:camera_id"
127-
if len(parts) < 2:
128-
return
129-
130-
camera_type = parts[0]
128+
camera_type, _ = parse_video_track_id(track.id)
131129
if camera_type in self.expected_incoming_camera_types:
132130
self.incoming_camera_tracks[camera_type] = track
133131
elif track.kind == "audio":
@@ -194,7 +192,8 @@ def set_message_handler(self, message_handler: MessageHandler):
194192
def is_started(self) -> bool:
195193
return self.peer_connection is not None and \
196194
self.peer_connection.localDescription is not None and \
197-
self.peer_connection.remoteDescription is not None
195+
self.peer_connection.remoteDescription is not None and \
196+
self.peer_connection.connectionState != "closed"
198197

199198
@property
200199
def is_connected_and_ready(self) -> bool:
@@ -203,6 +202,7 @@ def is_connected_and_ready(self) -> bool:
203202
self.expected_number_of_incoming_media != 0 and self.incoming_media_ready_event.is_set()
204203

205204
async def wait_for_connection(self):
205+
assert self.is_started
206206
await self.connection_attempted_event.wait()
207207
if self.peer_connection.connectionState != 'connected':
208208
raise ValueError("Connection failed.")
@@ -212,6 +212,7 @@ async def wait_for_connection(self):
212212
await self.messaging_channel_ready_event.wait()
213213

214214
async def wait_for_disconnection(self):
215+
assert self.is_connected_and_ready
215216
await self.connection_stopped_event.wait()
216217

217218
async def stop(self):

src/teleoprtc/tracks.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
import logging
33
import time
44
import fractions
5-
from typing import Optional, Any
5+
from typing import Optional, Tuple, Any
66

77
import aiortc
88
from aiortc.mediastreams import VIDEO_CLOCK_RATE, VIDEO_TIME_BASE
@@ -12,6 +12,15 @@ def video_track_id(camera_type: str, track_id: str) -> str:
1212
return f"{camera_type}:{track_id}"
1313

1414

15+
def parse_video_track_id(track_id: str) -> Tuple[str, str]:
16+
parts = track_id.split(":")
17+
if len(parts) != 2:
18+
raise ValueError(f"Invalid video track id: {track_id}")
19+
20+
camera_type, track_id = parts
21+
return camera_type, track_id
22+
23+
1524
class TiciVideoStreamTrack(aiortc.MediaStreamTrack):
1625
"""
1726
Abstract video track which associates video track with camera_type

0 commit comments

Comments
 (0)