Skip to content

Commit e5af7bc

Browse files
committed
refactor: create separate guessCodec function
1 parent dc50209 commit e5af7bc

File tree

1 file changed

+55
-34
lines changed

1 file changed

+55
-34
lines changed

index.ts

Lines changed: 55 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,56 @@ const HLS_ATTRIBUTE_REGEXP = new RegExp(
1616
"g"
1717
);
1818

19+
const guessCodec = (
20+
codecs: string[]
21+
): { audio?: string; video: string } | undefined => {
22+
if (codecs.length === 1) {
23+
return {
24+
audio: undefined,
25+
video: codecs[0],
26+
};
27+
}
28+
29+
if (codecs.length >= 2) {
30+
// Guess based on some of the most common codecs. There is no
31+
// way to be 100% certain which codec belongs to which track
32+
// in the HLS standard.
33+
const firstIsProbablyVideo = codecs[0].includes("avc");
34+
const secondIsProbablyVideo = codecs[1].includes("avc");
35+
36+
const firstIsProbablyAudio = codecs[0].includes("mp4a");
37+
const secondIsProbablyAudio = codecs[1].includes("mp4a");
38+
39+
if (firstIsProbablyVideo) {
40+
return {
41+
video: codecs[0],
42+
audio: codecs[1],
43+
};
44+
}
45+
46+
if (secondIsProbablyVideo) {
47+
return {
48+
video: codecs[1],
49+
audio: codecs[0],
50+
};
51+
}
52+
53+
if (firstIsProbablyAudio) {
54+
return {
55+
video: codecs[1],
56+
audio: codecs[0],
57+
};
58+
}
59+
60+
if (secondIsProbablyAudio) {
61+
return {
62+
video: codecs[0],
63+
audio: codecs[1],
64+
};
65+
}
66+
}
67+
};
68+
1969
const BITRATE_POLL_INTERVAL = 5 * 1000;
2070

2171
export class SafariBitrateMonitor {
@@ -99,40 +149,11 @@ export class SafariBitrateMonitor {
99149
case "CODECS": {
100150
const codecs = value.replace(/"/g, "").split(",");
101151

102-
if (codecs.length === 1) {
103-
playlist.videoCodec = codecs[0];
104-
}
152+
const avCodecs = guessCodec(codecs);
153+
154+
playlist.videoCodec = avCodecs.video;
155+
playlist.audioCodec = avCodecs.audio;
105156

106-
if (codecs.length >= 2) {
107-
// Guess based on some of the most common codecs. There is no
108-
// way to be 100% certain which codec belongs to which track
109-
// in the HLS standard.
110-
const firstIsProbablyVideo = codecs[0].includes("avc");
111-
const secondIsProbablyVideo = codecs[1].includes("avc");
112-
113-
const firstIsProbablyAudio = codecs[0].includes("mp4");
114-
const secondIsProbablyAudio = codecs[1].includes("mp4");
115-
116-
if (firstIsProbablyVideo) {
117-
playlist.videoCodec = codecs[0];
118-
playlist.audioCodec = codecs[1];
119-
}
120-
121-
if (secondIsProbablyVideo) {
122-
playlist.videoCodec = codecs[1];
123-
playlist.audioCodec = codecs[0];
124-
}
125-
126-
if (firstIsProbablyAudio) {
127-
playlist.videoCodec = codecs[1];
128-
playlist.audioCodec = codecs[0];
129-
}
130-
131-
if (secondIsProbablyAudio) {
132-
playlist.videoCodec = codecs[0];
133-
playlist.audioCodec = codecs[1];
134-
}
135-
}
136157
break;
137158
}
138159
case "FRAME-RATE":
@@ -149,7 +170,7 @@ export class SafariBitrateMonitor {
149170
}
150171
}
151172
});
152-
console.log("play", playlists)
173+
console.log("play", playlists);
153174
return playlists;
154175
}
155176

0 commit comments

Comments
 (0)