mirror of
https://github.com/ApfelTeeSaft/restream_playout.git
synced 2026-08-26 19:33:32 +00:00
36 lines
1.6 KiB
Python
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)
|
|
|