test(hls): add byterange playlist rewrite case

Verifies HlsPlaylistRewriter handles the default single-file-per-rendition
output from HlsPreparer where every segment reference points to the same
combined fMP4 file and EXT-X-BYTERANGE lines must be preserved unchanged.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
davotoula
2026-04-14 15:30:31 +02:00
parent 80b7b38b27
commit 07ae5d3ac7
@@ -216,6 +216,56 @@ class HlsPlaylistRewriterTest {
assertEquals(expected, rewritten)
}
@Test
fun rewritesSingleFileByterangePlaylist() {
// Matches PlaylistGenerator.buildByteRangeMediaPlaylist output when HlsConfig
// singleFilePerRendition=true (the default). All segment references point to
// the same combined fMP4 file; #EXT-X-BYTERANGE lines must be preserved.
val playlist =
"""
#EXTM3U
#EXT-X-VERSION:7
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MAP:URI="360p.mp4",BYTERANGE="1234@0"
#EXTINF:6.000,
#EXT-X-BYTERANGE:500000@1234
360p.mp4
#EXTINF:6.000,
#EXT-X-BYTERANGE:480000@501234
360p.mp4
#EXT-X-ENDLIST
""".trimIndent()
val rewritten =
HlsPlaylistRewriter.rewrite(
playlist,
mapOf("360p.mp4" to "https://cdn/abc.mp4"),
)
val expected =
"""
#EXTM3U
#EXT-X-VERSION:7
#EXT-X-TARGETDURATION:6
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MAP:URI="https://cdn/abc.mp4",BYTERANGE="1234@0"
#EXTINF:6.000,
#EXT-X-BYTERANGE:500000@1234
https://cdn/abc.mp4
#EXTINF:6.000,
#EXT-X-BYTERANGE:480000@501234
https://cdn/abc.mp4
#EXT-X-ENDLIST
""".trimIndent()
assertEquals(expected, rewritten)
}
@Test
fun throwsWhenSegmentReferenceIsMissingFromUrlMap() {
val playlist =