p2p-media-loader-hlsjs
Version:
P2P Media Loader hls.js integration
61 lines • 2.27 kB
JavaScript
import * as Utils from "./utils.js";
export class SegmentManager {
constructor(core) {
Object.defineProperty(this, "core", {
enumerable: true,
configurable: true,
writable: true,
value: void 0
});
this.core = core;
}
processMainManifest(data) {
const { levels, audioTracks } = data;
// in the case of audio only stream it is stored in levels
for (const [index, level] of levels.entries()) {
const { url } = level;
this.core.addStreamIfNoneExists({
runtimeId: Array.isArray(url) ? url[0] : url,
type: "main",
index,
});
}
for (const [index, track] of audioTracks.entries()) {
const { url } = track;
this.core.addStreamIfNoneExists({
runtimeId: Array.isArray(url) ? url[0] : url,
type: "secondary",
index,
});
}
}
updatePlaylist(data) {
const { details: { url, fragments, live }, } = data;
const playlist = this.core.getStream(url);
if (!playlist)
return;
const segmentToRemoveIds = new Set(playlist.segments.keys());
const newSegments = [];
fragments.forEach((fragment, index) => {
const { url: responseUrl, byteRange: fragByteRange, sn, start: startTime, end: endTime, } = fragment;
const [start, end] = fragByteRange;
const byteRange = Utils.getByteRange(start, end !== undefined ? end - 1 : undefined);
const runtimeId = Utils.getSegmentRuntimeId(responseUrl, byteRange);
segmentToRemoveIds.delete(runtimeId);
if (playlist.segments.has(runtimeId))
return;
newSegments.push({
runtimeId,
url: responseUrl,
externalId: live ? sn : index,
byteRange,
startTime,
endTime,
});
});
if (!newSegments.length && !segmentToRemoveIds.size)
return;
this.core.updateStream(url, newSegments, segmentToRemoveIds.values());
}
}
//# sourceMappingURL=segment-mananger.js.map