p2p-media-loader-shaka
Version:
P2P Media Loader Shaka Player integration
60 lines • 2.03 kB
JavaScript
export function createSegment({ segmentReference, externalId, runtimeId, }) {
const { byteRange, url, startTime, endTime } = getSegmentInfoFromReference(segmentReference);
return {
runtimeId: runtimeId ?? getSegmentRuntimeId(url, byteRange),
externalId,
byteRange,
url,
startTime,
endTime,
};
}
export function getSegmentRuntimeIdFromReference(segmentReference) {
const { url, byteRange } = getSegmentInfoFromReference(segmentReference);
return getSegmentRuntimeId(url, byteRange);
}
export function getSegmentRuntimeId(url, byteRange) {
if (!byteRange)
return url;
const range = typeof byteRange === "string"
? getByteRangeFromHeaderString(byteRange)
: byteRange;
if (!range)
return url;
return `${url}|${range.start}-${range.end}`;
}
export function getByteRangeFromHeaderString(rangeStr) {
if (!rangeStr?.includes("bytes="))
return undefined;
const range = rangeStr
.split("=")[1]
.split("-")
.map((i) => parseInt(i));
const [start, end] = range;
return { start, end };
}
export function getSegmentInfoFromReference(segmentReference) {
const uris = segmentReference.getUris();
const responseUrl = uris[1] ?? uris[0];
const start = segmentReference.getStartByte();
const end = segmentReference.getEndByte() ?? undefined;
const startTime = segmentReference.getStartTime();
const endTime = segmentReference.getEndTime();
return {
byteRange: end !== undefined ? { start, end } : undefined,
url: responseUrl,
startTime,
endTime,
};
}
export function getStreamLastMediaSequence(stream) {
const { shakaStream } = stream;
const map = shakaStream.mediaSequenceTimeMap;
if (!map)
return;
const firstMediaSequence = map.keys().next().value;
if (firstMediaSequence === undefined)
return;
return firstMediaSequence + map.size - 1;
}
//# sourceMappingURL=stream-utils.js.map