Skip to content

Commit 8a631e7

Browse files
committed
refactor: Clear logic
1 parent c504d89 commit 8a631e7

File tree

1 file changed

+32
-32
lines changed

1 file changed

+32
-32
lines changed

packages/p2p-media-loader-core/src/segment-storage/segment-memory-storage.ts

Lines changed: 32 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,12 @@ type LastRequestedSegmentInfo = {
2626
isLiveStream: boolean;
2727
};
2828

29+
type ObsoleteSegments = {
30+
live: string[];
31+
vod: string[];
32+
vodDifferentQuality: string[];
33+
};
34+
2935
const getStorageItemId = (streamId: string, segmentId: number) =>
3036
`${streamId}|${segmentId}`;
3137

@@ -267,49 +273,43 @@ export class SegmentMemoryStorage implements SegmentStorage {
267273
return [];
268274
}
269275

270-
const obsoleteSegments: string[] = [];
276+
const obsoleteSegments: ObsoleteSegments = {
277+
live: [],
278+
vod: [],
279+
vodDifferentQuality: [],
280+
};
271281
const playbackPosition = this.currentPlayback.position;
272282

273283
for (const segmentData of this.cache.values()) {
274-
const { streamId, segmentId } = segmentData;
284+
const { streamId, segmentId, endTime, streamType } = segmentData;
275285
const storageId = getStorageItemId(streamId, segmentId);
276-
277-
const shouldRemove = this.shouldRemoveSegment(
278-
segmentData,
279-
isLiveStream,
280-
currentStreamId,
281-
playbackPosition,
286+
const highDemandTimeWindow = this.getStreamTimeWindow(
287+
streamType,
288+
"highDemandTimeWindow",
282289
);
283290

284-
if (shouldRemove) obsoleteSegments.push(storageId);
285-
}
291+
if (playbackPosition <= endTime) continue;
286292

287-
return obsoleteSegments;
288-
}
293+
if (isLiveStream) {
294+
if (playbackPosition > endTime + highDemandTimeWindow) {
295+
obsoleteSegments.live.push(storageId);
296+
}
297+
continue;
298+
}
289299

290-
private shouldRemoveSegment(
291-
segmentData: SegmentDataItem,
292-
isLiveStream: boolean,
293-
currentStreamId: string,
294-
currentPlaybackPosition: number,
295-
): boolean {
296-
const { streamId, endTime, streamType } = segmentData;
297-
const highDemandTimeWindow = this.getStreamTimeWindow(
298-
streamType,
299-
"highDemandTimeWindow",
300-
);
300+
if (streamId !== currentStreamId) {
301+
obsoleteSegments.vodDifferentQuality.push(storageId);
302+
continue;
303+
}
301304

302-
if (currentPlaybackPosition <= endTime) return false;
303-
if (streamId !== currentStreamId) return true;
304-
if (
305-
isLiveStream &&
306-
currentPlaybackPosition > highDemandTimeWindow + endTime
307-
) {
308-
return true;
305+
obsoleteSegments.vod.push(storageId);
309306
}
310-
if (!isLiveStream) return true;
311307

312-
return false;
308+
if (obsoleteSegments.live.length > 0) return obsoleteSegments.live;
309+
if (obsoleteSegments.vodDifferentQuality.length > 0) {
310+
return obsoleteSegments.vodDifferentQuality;
311+
}
312+
return obsoleteSegments.vod;
313313
}
314314

315315
private setMemoryStorageLimit() {

0 commit comments

Comments
 (0)