-
Notifications
You must be signed in to change notification settings - Fork 0
/
convert-playlist.spec.ts
119 lines (114 loc) · 4.39 KB
/
convert-playlist.spec.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
import HLS from "hls-parser";
import { convertPlaylist } from "./convert-playlist";
type TestCase = {
requestURL: string;
input: string;
expected: string;
};
const test = ({ requestURL, input, expected }: TestCase) => {
const playlist = HLS.parse(input);
convertPlaylist(playlist, "http://example.com", requestURL);
const output = HLS.stringify(playlist);
expect(output).toBe(expected);
};
const testCases: TestCase[] = [
{
requestURL: "/foo/video.m3u8?baz=hoge&fuga=piyo",
input: `#EXTM3U
#EXT-X-VERSION:6
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-STREAM-INF:BANDWIDTH=2350291,AVERAGE-BANDWIDTH=1838189,VIDEO-RANGE=SDR,CODECS="avc1.4d4028,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=30.000,AUDIO="program_audio_0"
video1080p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=254682,AVERAGE-BANDWIDTH=244886,VIDEO-RANGE=SDR,CODECS="avc1.4d4015,mp4a.40.2",RESOLUTION=428x240,FRAME-RATE=30.000,AUDIO="program_audio_0"
video240p.m3u8
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="program_audio_0",LANGUAGE="eng",NAME="Alternate Audio",AUTOSELECT=YES,DEFAULT=YES,URI="videoaudio.m3u8"`,
expected: `#EXTM3U
#EXT-X-VERSION:6
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="program_audio_0",NAME="Alternate Audio",DEFAULT=YES,AUTOSELECT=YES,LANGUAGE="eng",URI="videoaudio.m3u8?baz=hoge&fuga=piyo"
#EXT-X-STREAM-INF:BANDWIDTH=2350291,AVERAGE-BANDWIDTH=1838189,CODECS="avc1.4d4028,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=30.000,AUDIO="program_audio_0",VIDEO-RANGE=SDR
video1080p.m3u8?baz=hoge&fuga=piyo
#EXT-X-STREAM-INF:BANDWIDTH=254682,AVERAGE-BANDWIDTH=244886,CODECS="avc1.4d4015,mp4a.40.2",RESOLUTION=428x240,FRAME-RATE=30.000,AUDIO="program_audio_0",VIDEO-RANGE=SDR
video240p.m3u8?baz=hoge&fuga=piyo`,
},
{
requestURL: "/video.m3u8",
input: `#EXTM3U
#EXT-X-VERSION:6
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-STREAM-INF:BANDWIDTH=2350291,AVERAGE-BANDWIDTH=1838189,VIDEO-RANGE=SDR,CODECS="avc1.4d4028,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=30.000,AUDIO="program_audio_0"
video1080p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=254682,AVERAGE-BANDWIDTH=244886,VIDEO-RANGE=SDR,CODECS="avc1.4d4015,mp4a.40.2",RESOLUTION=428x240,FRAME-RATE=30.000,AUDIO="program_audio_0"
video240p.m3u8
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="program_audio_0",LANGUAGE="eng",NAME="Alternate Audio",AUTOSELECT=YES,DEFAULT=YES,URI="videoaudio.m3u8"`,
expected: `#EXTM3U
#EXT-X-VERSION:6
#EXT-X-INDEPENDENT-SEGMENTS
#EXT-X-MEDIA:TYPE=AUDIO,GROUP-ID="program_audio_0",NAME="Alternate Audio",DEFAULT=YES,AUTOSELECT=YES,LANGUAGE="eng",URI="videoaudio.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=2350291,AVERAGE-BANDWIDTH=1838189,CODECS="avc1.4d4028,mp4a.40.2",RESOLUTION=1920x1080,FRAME-RATE=30.000,AUDIO="program_audio_0",VIDEO-RANGE=SDR
video1080p.m3u8
#EXT-X-STREAM-INF:BANDWIDTH=254682,AVERAGE-BANDWIDTH=244886,CODECS="avc1.4d4015,mp4a.40.2",RESOLUTION=428x240,FRAME-RATE=30.000,AUDIO="program_audio_0",VIDEO-RANGE=SDR
video240p.m3u8`,
},
{
requestURL: "/foo/video.m3u8?baz=hoge&fuga=piyo",
input: `#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:11
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MAP:URI="video240p.cmfv",BYTERANGE="1566@0"
#EXTINF:10,
#EXT-X-BYTERANGE:140787@1566
video240p.cmfv
#EXTINF:8,
#EXT-X-BYTERANGE:75730@1561297
video240p.cmfv
#EXT-X-ENDLIST`,
expected: `#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:11
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MAP:URI="http://example.com/foo/video240p.cmfv?baz=hoge&fuga=piyo",BYTERANGE="1566@0"
#EXTINF:10,
#EXT-X-BYTERANGE:140787@1566
http://example.com/foo/video240p.cmfv?baz=hoge&fuga=piyo
#EXTINF:8,
#EXT-X-BYTERANGE:75730@1561297
http://example.com/foo/video240p.cmfv?baz=hoge&fuga=piyo
#EXT-X-ENDLIST`,
},
{
requestURL: "/video.m3u8",
input: `#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:11
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MAP:URI="video240p.cmfv",BYTERANGE="1566@0"
#EXTINF:10,
#EXT-X-BYTERANGE:140787@1566
video240p.cmfv
#EXTINF:8,
#EXT-X-BYTERANGE:75730@1561297
video240p.cmfv
#EXT-X-ENDLIST`,
expected: `#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:11
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MAP:URI="http://example.com/video240p.cmfv",BYTERANGE="1566@0"
#EXTINF:10,
#EXT-X-BYTERANGE:140787@1566
http://example.com/video240p.cmfv
#EXTINF:8,
#EXT-X-BYTERANGE:75730@1561297
http://example.com/video240p.cmfv
#EXT-X-ENDLIST`,
},
];
describe("convertPlaylist", () => {
it("adds the query etc. to the URI value.", () => testCases.forEach(test));
});