def test_route_rtp(self): receiver1 = object() receiver2 = object() router = RtpRouter() router.register_receiver(receiver1, ssrcs=[1234, 2345], payload_types=[96, 97]) router.register_receiver(receiver2, ssrcs=[3456, 4567], payload_types=[98, 99]) # known SSRC and payload type self.assertEqual( router.route_rtp(RtpPacket(ssrc=1234, payload_type=96)), receiver1 ) self.assertEqual( router.route_rtp(RtpPacket(ssrc=2345, payload_type=97)), receiver1 ) self.assertEqual( router.route_rtp(RtpPacket(ssrc=3456, payload_type=98)), receiver2 ) self.assertEqual( router.route_rtp(RtpPacket(ssrc=4567, payload_type=99)), receiver2 ) # unknown SSRC, known payload type self.assertEqual( router.route_rtp(RtpPacket(ssrc=5678, payload_type=96)), receiver1 ) self.assertEqual(router.ssrc_table[5678], receiver1) # unknown SSRC and payload type self.assertEqual(router.route_rtp(RtpPacket(ssrc=6789, payload_type=100)), None)
def test_route_rtp_ambiguous_payload_type(self): receiver1 = object() receiver2 = object() router = RtpRouter() router.register_receiver(receiver1, ssrcs=[1234, 2345], payload_types=[96, 97]) router.register_receiver(receiver2, ssrcs=[3456, 4567], payload_types=[96, 97]) # known SSRC and payload type self.assertEqual( router.route_rtp(RtpPacket(ssrc=1234, payload_type=96)), receiver1 ) self.assertEqual( router.route_rtp(RtpPacket(ssrc=2345, payload_type=97)), receiver1 ) self.assertEqual( router.route_rtp(RtpPacket(ssrc=3456, payload_type=96)), receiver2 ) self.assertEqual( router.route_rtp(RtpPacket(ssrc=4567, payload_type=97)), receiver2 ) # unknown SSRC, ambiguous payload type self.assertEqual(router.route_rtp(RtpPacket(ssrc=5678, payload_type=96)), None) self.assertEqual(router.route_rtp(RtpPacket(ssrc=5678, payload_type=97)), None)
def test_route_rtcp(self): receiver = object() sender = object() router = RtpRouter() router.register_receiver(receiver, ssrcs=[1234, 2345], payload_types=[96, 97]) router.register_sender(sender, ssrc=3456) # BYE packet = RtcpByePacket(sources=[1234, 2345]) self.assertEqual(router.route_rtcp(packet), set([receiver])) # RR packet = RtcpRrPacket( ssrc=1234, reports=[ RtcpReceiverInfo( ssrc=3456, fraction_lost=0, packets_lost=0, highest_sequence=630, jitter=1906, lsr=0, dlsr=0, ) ], ) self.assertEqual(router.route_rtcp(packet), set([sender])) # SR packet = RtcpSrPacket( ssrc=1234, sender_info=RtcpSenderInfo( ntp_timestamp=0, rtp_timestamp=0, packet_count=0, octet_count=0 ), reports=[ RtcpReceiverInfo( ssrc=3456, fraction_lost=0, packets_lost=0, highest_sequence=630, jitter=1906, lsr=0, dlsr=0, ) ], ) self.assertEqual(router.route_rtcp(packet), set([receiver, sender])) # PSFB - PLI packet = RtcpPsfbPacket(fmt=RTCP_PSFB_PLI, ssrc=1234, media_ssrc=3456) self.assertEqual(router.route_rtcp(packet), set([sender])) # PSFB - REMB packet = RtcpPsfbPacket( fmt=RTCP_PSFB_APP, ssrc=1234, media_ssrc=0, fci=pack_remb_fci(4160000, [3456]), ) self.assertEqual(router.route_rtcp(packet), set([sender])) # PSFB - JUNK packet = RtcpPsfbPacket(fmt=RTCP_PSFB_APP, ssrc=1234, media_ssrc=0, fci=b"JUNK") self.assertEqual(router.route_rtcp(packet), set()) # RTPFB packet = RtcpRtpfbPacket(fmt=RTCP_RTPFB_NACK, ssrc=1234, media_ssrc=3456) self.assertEqual(router.route_rtcp(packet), set([sender]))