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:
+50
@@ -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 =
|
||||
|
||||
Reference in New Issue
Block a user