Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
def create_rtp_packets(count, seq=0):
packets = []
for i in range(count):
packets.append(
RtpPacket(
payload_type=0,
sequence_number=uint16_add(seq, i),
ssrc=1234,
timestamp=i * 160,
)
)
return packets
def test_add_seq_too_high_discard_more(self):
jbuffer = JitterBuffer(capacity=4)
jbuffer.add(RtpPacket(sequence_number=0, timestamp=1234))
self.assertEqual(jbuffer._origin, 0)
jbuffer.add(RtpPacket(sequence_number=1, timestamp=1234))
self.assertEqual(jbuffer._origin, 0)
jbuffer.add(RtpPacket(sequence_number=2, timestamp=1234))
self.assertEqual(jbuffer._origin, 0)
jbuffer.add(RtpPacket(sequence_number=3, timestamp=1234))
self.assertEqual(jbuffer._origin, 0)
jbuffer.add(RtpPacket(sequence_number=8, timestamp=1234))
self.assertEqual(jbuffer._origin, 8)
self.assertPackets(jbuffer, [8, None, None, None])
async def mock_send_rtp(data):
if not is_rtcp(data):
await queue.put(RtpPacket.parse(data))
"""
Video jitter buffer.
"""
jbuffer = JitterBuffer(capacity=128)
packet = RtpPacket(sequence_number=0, timestamp=1234)
packet._data = b"0000"
frame = jbuffer.add(packet)
self.assertIsNone(frame)
packet = RtpPacket(sequence_number=1, timestamp=1234)
packet._data = b"0001"
frame = jbuffer.add(packet)
self.assertIsNone(frame)
packet = RtpPacket(sequence_number=2, timestamp=1234)
packet._data = b"0002"
frame = jbuffer.add(packet)
self.assertIsNone(frame)
packet = RtpPacket(sequence_number=3, timestamp=1235)
packet._data = b"0003"
frame = jbuffer.add(packet)
self.assertIsNotNone(frame)
self.assertEqual(frame.data, b"000000010002")
self.assertEqual(frame.timestamp, 1234)
def test_add_ordered(self):
jbuffer = JitterBuffer(capacity=4)
frame = jbuffer.add(RtpPacket(sequence_number=0, timestamp=1234))
self.assertIsNone(frame)
self.assertPackets(jbuffer, [0, None, None, None])
self.assertEqual(jbuffer._origin, 0)
frame = jbuffer.add(RtpPacket(sequence_number=1, timestamp=1234))
self.assertIsNone(frame)
self.assertPackets(jbuffer, [0, 1, None, None])
self.assertEqual(jbuffer._origin, 0)
frame = jbuffer.add(RtpPacket(sequence_number=2, timestamp=1234))
self.assertIsNone(frame)
self.assertPackets(jbuffer, [0, 1, 2, None])
self.assertEqual(jbuffer._origin, 0)
frame = jbuffer.add(RtpPacket(sequence_number=3, timestamp=1234))
self.assertIsNone(frame)
self.assertPackets(jbuffer, [0, 1, 2, 3])
self.assertEqual(jbuffer._origin, 0)
def test_add_seq_too_high_discard_one(self):
jbuffer = JitterBuffer(capacity=4)
jbuffer.add(RtpPacket(sequence_number=0, timestamp=1234))
self.assertEqual(jbuffer._origin, 0)
jbuffer.add(RtpPacket(sequence_number=1, timestamp=1234))
self.assertEqual(jbuffer._origin, 0)
jbuffer.add(RtpPacket(sequence_number=2, timestamp=1234))
self.assertEqual(jbuffer._origin, 0)
jbuffer.add(RtpPacket(sequence_number=3, timestamp=1234))
self.assertEqual(jbuffer._origin, 0)
jbuffer.add(RtpPacket(sequence_number=4, timestamp=1234))
self.assertEqual(jbuffer._origin, 1)
self.assertPackets(jbuffer, [4, 1, 2, 3])
def test_add_seq_too_low_reset(self):
jbuffer = JitterBuffer(capacity=4)
frame = jbuffer.add(RtpPacket(sequence_number=2000, timestamp=1234))
self.assertIsNone(frame)
self.assertPackets(jbuffer, [2000, None, None, None])
self.assertEqual(jbuffer._origin, 2000)
frame = jbuffer.add(RtpPacket(sequence_number=1, timestamp=1234))
self.assertIsNone(frame)
self.assertPackets(jbuffer, [None, 1, None, None])
self.assertEqual(jbuffer._origin, 1)
def test_rtp_invalid_payload(self):
receiver = RTCRtpReceiver("video", self.local_transport)
self.assertEqual(receiver.transport, self.local_transport)
receiver._track = RemoteStreamTrack(kind="video")
run(receiver.receive(RTCRtpReceiveParameters(codecs=[VP8_CODEC])))
# receive RTP with unknown payload type
packet = RtpPacket(payload_type=100, payload=b"\x80")
run(receiver._handle_rtp_packet(packet, arrival_time_ms=0))
# shutdown
run(receiver.stop())