77import aiortc
88from aiortc .contrib .media import MediaRelay
99
10+ from teleoprtc .tracks import parse_video_track_id
11+
1012
1113@dataclasses .dataclass
1214class 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 ):
0 commit comments