[docs]classRTSPRawStreamer:"""Forwards all arguments to `aiortsp.rtsp.reader.RTSPReader <https://github.com/marss/aiortsp/blob/master/aiortsp/rtsp/reader.py#L31-L32>`_ """def__init__(self,*args,**kwargs):self._reader=_WallclockRTSPReader(*args,**kwargs)self._encoding=None
[docs]asyncdefreceive(self)->T.AsyncIterator[RTSPData]:asyncforpktinself.reader.iter_packets():try:timestamp_seconds=self.reader.absolute_timestamp_from_packet(pkt)except_UnknownClockoffsetError:# The absolute timestamp is not known yet.# Waiting for the first RTCP SR packet...continueyieldRTSPData(pkt.data,timestamp_seconds)
@propertydefreader(self):returnself._reader@propertydefencoding(self):""":raises pupil_labs.realtime_api.streaming.base.SDPDataNotAvailableError:"""ifself._encodingisNone:try:attributes=self._reader.session.sdp["medias"][0]["attributes"]rtpmap=attributes["rtpmap"]self._encoding=rtpmap["encoding"].lower()except(IndexError,KeyError)aserr:raiseSDPDataNotAvailableError(f"SDP data is missing {err} field")fromerrreturnself._encodingasyncdef__aenter__(self,*args,**kwargs):awaitself.reader.__aenter__(*args,**kwargs)returnselfasyncdef__aexit__(self,*args,**kwargs):returnawaitself.reader.__aexit__(*args,**kwargs)
[docs]defabsolute_timestamp_from_packet(self,packet):"""Returns the Unix epoch timestamp for the input packet Uses the cached clock offset between the NTP and relative timestamp provided by the RTCP packets. """try:return(self.relative_timestamp_from_packet(packet)+self._relative_to_ntp_clock_offset)exceptTypeError:# self._relative_to_ntp_clock_offset is still Noneraise_UnknownClockoffsetError("Clock offset between relative and NTP clock is still unknown. ""Waiting for first RTCP SR packet...")
[docs]def_calculate_clock_offset(self,sr_pkt):# Expected input: aiortsp.rtcp.parser.SR packet which converts the raw NTP# timestamp [1] from seconds since 1900 to seconds since 1970 (unix epoch)# [1] see https://datatracker.ietf.org/doc/html/rfc3550#section-6.4.1self._relative_to_ntp_clock_offset=(sr_pkt.ntp-self.relative_timestamp_from_packet(sr_pkt))