def test_rtx(self): extensions_map = rtp.HeaderExtensionsMap() extensions_map.configure( RTCRtpParameters(headerExtensions=[ RTCRtpHeaderExtensionParameters( id=9, uri="urn:ietf:params:rtp-hdrext:sdes:mid") ])) data = load("rtp_with_sdes_mid.bin") packet = RtpPacket.parse(data, extensions_map) # wrap / unwrap RTX rtx = wrap_rtx(packet, payload_type=112, sequence_number=12345, ssrc=1234) recovered = unwrap_rtx(rtx, payload_type=111, ssrc=4084547440) # check roundtrip self.assertEqual(recovered.version, packet.version) self.assertEqual(recovered.marker, packet.marker) self.assertEqual(recovered.payload_type, packet.payload_type) self.assertEqual(recovered.sequence_number, packet.sequence_number) self.assertEqual(recovered.timestamp, packet.timestamp) self.assertEqual(recovered.ssrc, packet.ssrc) self.assertEqual(recovered.csrc, packet.csrc) self.assertEqual(recovered.extensions, packet.extensions) self.assertEqual(recovered.payload, packet.payload)
def test_padding_only_with_header_extensions(self): extensions_map = rtp.HeaderExtensionsMap() extensions_map.configure( RTCRtpParameters(headerExtensions=[ RTCRtpHeaderExtensionParameters( id=2, uri= "http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time", ) ])) data = load("rtp_only_padding_with_header_extensions.bin") packet = RtpPacket.parse(data, extensions_map) self.assertEqual(packet.version, 2) self.assertEqual(packet.marker, 0) self.assertEqual(packet.payload_type, 98) self.assertEqual(packet.sequence_number, 22138) self.assertEqual(packet.timestamp, 3171065731) self.assertEqual(packet.csrc, []) self.assertEqual(packet.extensions, rtp.HeaderExtensions(abs_send_time=15846540)) self.assertEqual(len(packet.payload), 0) self.assertEqual(packet.padding_size, 224) serialized = packet.serialize(extensions_map) self.assertEqual(len(serialized), len(data)) self.assertEqual(serialized[0:20], data[0:20]) self.assertEqual(serialized[-1], data[-1])
def test_map_header_extensions(self): data = bytearray([ 0x90, 0x64, 0x00, 0x58, 0x65, 0x43, 0x12, 0x78, 0x12, 0x34, 0x56, 0x78, # SSRC 0xbe, 0xde, 0x00, 0x08, # Extension of size 8x32bit words. 0x40, 0xda, # AudioLevel. 0x22, 0x01, 0x56, 0xce, # TransmissionOffset. 0x62, 0x12, 0x34, 0x56, # AbsoluteSendTime. 0x81, 0xce, 0xab, # TransportSequenceNumber. 0xa0, 0x03, # VideoRotation. 0xb2, 0x12, 0x48, 0x76, # PlayoutDelayLimits. 0xc2, 0x72, 0x74, 0x78, # RtpStreamId 0xd5, 0x73, 0x74, 0x72, 0x65, 0x61, 0x6d, # RepairedRtpStreamId 0x00, 0x00, # Padding to 32bit boundary. ]) extensions_map = rtp.HeaderExtensionsMap() extensions_map.configure(RTCRtpParameters( headerExtensions=[ RTCRtpHeaderExtensionParameters( id=2, uri='urn:ietf:params:rtp-hdrext:toffset'), RTCRtpHeaderExtensionParameters( id=4, uri='urn:ietf:params:rtp-hdrext:ssrc-audio-level'), RTCRtpHeaderExtensionParameters( id=6, uri='http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time'), RTCRtpHeaderExtensionParameters( id=8, uri='http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01'), # noqa RTCRtpHeaderExtensionParameters( id=12, uri='urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id'), RTCRtpHeaderExtensionParameters( id=13, uri='urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id'), ])) packet = RtpPacket.parse(data, extensions_map) # check mapped values self.assertEqual(packet.extensions.abs_send_time, 0x123456) self.assertEqual(packet.extensions.audio_level, (True, 90)) self.assertEqual(packet.extensions.mid, None) self.assertEqual(packet.extensions.repaired_rtp_stream_id, 'stream') self.assertEqual(packet.extensions.rtp_stream_id, 'rtx') self.assertEqual(packet.extensions.transmission_offset, 0x156ce) self.assertEqual(packet.extensions.transport_sequence_number, 0xceab) # TODO: check packet.serialize(extensions_map)
def test_with_sdes_mid(self): extensions_map = rtp.HeaderExtensionsMap() extensions_map.configure( RTCRtpParameters(headerExtensions=[ RTCRtpHeaderExtensionParameters( id=9, uri="urn:ietf:params:rtp-hdrext:sdes:mid") ])) data = load("rtp_with_sdes_mid.bin") packet = RtpPacket.parse(data, extensions_map) self.assertEqual(packet.version, 2) self.assertEqual(packet.marker, 1) self.assertEqual(packet.payload_type, 111) self.assertEqual(packet.sequence_number, 14156) self.assertEqual(packet.timestamp, 1327210925) self.assertEqual(packet.csrc, []) self.assertEqual(packet.extensions, rtp.HeaderExtensions(mid="0")) self.assertEqual(len(packet.payload), 54) self.assertEqual(packet.serialize(extensions_map), data)