Files
2026-06-08 12:02:00 +02:00

36 lines
1.6 KiB
Python

from __future__ import annotations
import unittest
from restream_playout.filler import FillerSource, IDR, PPS, SPS
from restream_playout.flv import aac_sequence_header, avc_sequence_header, flv_tag, media_payload, metadata_payload
from restream_playout.models import MediaKind
class FillerAndFLVTests(unittest.TestCase):
def test_filler_has_valid_avcc_and_monotonic_packets(self) -> None:
filler = FillerSource()
config = filler.config
self.assertEqual(config.avc_decoder_config[0], 1)
self.assertIn(SPS, config.avc_decoder_config)
self.assertIn(PPS, config.avc_decoder_config)
self.assertEqual(IDR[0] & 0x1F, 5)
packets = [filler.next_packet() for _ in range(20)]
self.assertEqual([packet.dts_ms for packet in packets], sorted(packet.dts_ms for packet in packets))
self.assertIn(MediaKind.VIDEO, {packet.kind for packet in packets})
self.assertIn(MediaKind.AUDIO, {packet.kind for packet in packets})
def test_flv_payloads_and_tag(self) -> None:
filler = FillerSource()
config = filler.config
video = next(packet for packet in iter(filler.next_packet, None) if packet.kind is MediaKind.VIDEO)
self.assertEqual(avc_sequence_header(config)[:5], b"\x17\x00\x00\x00\x00")
self.assertEqual(aac_sequence_header(config)[:2], b"\xaf\x00")
self.assertEqual(media_payload(video)[:2], b"\x17\x01")
metadata = metadata_payload(config)
self.assertIn(b"onMetaData", metadata)
tag = flv_tag(9, 1234, media_payload(video))
self.assertEqual(tag[0], 9)
self.assertEqual(int.from_bytes(tag[-4:], "big"), len(tag) - 4)