Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def test_rtp_and_rtcp(self):
receiver = RTCRtpReceiver("audio", self.local_transport)
self.assertEqual(receiver.transport, self.local_transport)
receiver._track = RemoteStreamTrack(kind="audio")
self.assertEqual(receiver._track.readyState, "live")
run(receiver.receive(RTCRtpReceiveParameters(codecs=[PCMU_CODEC])))
# receive RTP
for i in range(10):
packet = RtpPacket.parse(load("rtp.bin"))
packet.sequence_number += i
packet.timestamp += i * 160
run(receiver._handle_rtp_packet(packet, arrival_time_ms=i * 20))
# receive RTCP SR
for packet in RtcpPacket.parse(load("rtcp_sr.bin")):
run(receiver._handle_rtcp_packet(packet))
# check stats
report = run(receiver.getStats())
self.assertTrue(isinstance(report, RTCStatsReport))
self.assertEqual(
sorted([s.type for s in report.values()]),
["inbound-rtp", "remote-outbound-rtp", "transport"],
)
def test_with_csrc(self):
data = load("rtp_with_csrc.bin")
packet = RtpPacket.parse(data)
self.assertEqual(packet.version, 2)
self.assertEqual(packet.marker, 0)
self.assertEqual(packet.payload_type, 0)
self.assertEqual(packet.sequence_number, 16082)
self.assertEqual(packet.timestamp, 144)
self.assertEqual(packet.csrc, [2882400001, 3735928559])
self.assertEqual(packet.extensions, rtp.HeaderExtensions())
self.assertEqual(len(packet.payload), 160)
self.assertEqual(packet.serialize(), data)
async def mock_send_rtp(data):
if not is_rtcp(data):
await queue.put(RtpPacket.parse(data))
def test_connection_error(self):
"""
Close the underlying transport before the receiver.
"""
receiver = RTCRtpReceiver("audio", self.local_transport)
self.assertEqual(receiver.transport, self.local_transport)
receiver._track = RemoteStreamTrack(kind="audio")
receiver._set_rtcp_ssrc(1234)
run(receiver.receive(RTCRtpReceiveParameters(codecs=[PCMU_CODEC])))
# receive a packet to prime RTCP
packet = RtpPacket.parse(load("rtp.bin"))
run(receiver._handle_rtp_packet(packet, arrival_time_ms=0))
# break connection
run(self.local_transport.stop())
# give RTCP time to send a report
run(asyncio.sleep(2))
# shutdown
run(receiver.stop())
def test_with_csrc_truncated(self):
data = load("rtp_with_csrc.bin")
for length in range(12, 20):
with self.assertRaises(ValueError) as cm:
RtpPacket.parse(data[0:length])
self.assertEqual(str(cm.exception), "RTP packet has truncated CSRC")
def test_padding_zero(self):
data = load("rtp_only_padding.bin")[0:12] + b"\x00"
with self.assertRaises(ValueError) as cm:
RtpPacket.parse(data)
self.assertEqual(str(cm.exception), "RTP packet padding length is invalid")
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_bad_version(self):
data = b"\xc0" + load("rtp.bin")[1:]
with self.assertRaises(ValueError) as cm:
RtpPacket.parse(data)
self.assertEqual(str(cm.exception), "RTP packet has invalid version")
def test_no_ssrc(self):
data = load("rtp.bin")
packet = RtpPacket.parse(data)
self.assertEqual(packet.version, 2)
self.assertEqual(packet.marker, 0)
self.assertEqual(packet.payload_type, 0)
self.assertEqual(packet.sequence_number, 15743)
self.assertEqual(packet.timestamp, 3937035252)
self.assertEqual(packet.csrc, [])
self.assertEqual(packet.extensions, rtp.HeaderExtensions())
self.assertEqual(len(packet.payload), 160)
self.assertEqual(packet.serialize(), data)
self.assertEqual(
repr(packet),
"RtpPacket(seq=15743, ts=3937035252, marker=0, payload=0, 160 bytes)",
)