UNPKG

p2p-media-loader-hlsjs

Version:
61 lines 2.27 kB
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