@@ -37,7 +37,7 @@ const BYTES_PER_MiB = 1048576;
37
37
export class SegmentMemoryStorage implements SegmentStorage {
38
38
private readonly userAgent = navigator . userAgent ;
39
39
private segmentMemoryStorageLimit = 4 * 1024 ;
40
- private currentMemoryStorageSize = 0 ;
40
+ private currentStorageUsage = 0 ;
41
41
42
42
private cache = new Map < string , SegmentDataItem > ( ) ;
43
43
private readonly logger : debug . Debugger ;
@@ -113,6 +113,7 @@ export class SegmentMemoryStorage implements SegmentStorage {
113
113
endTime,
114
114
streamType,
115
115
} ) ;
116
+ this . increaseStorageUsage ( data . byteLength ) ;
116
117
117
118
this . logger ( `add segment: ${ segmentId } to ${ streamId } ` ) ;
118
119
@@ -137,7 +138,7 @@ export class SegmentMemoryStorage implements SegmentStorage {
137
138
if ( ! this . lastRequestedSegment || ! this . currentPlayback ) {
138
139
return {
139
140
totalCapacity : this . segmentMemoryStorageLimit ,
140
- usedCapacity : this . currentMemoryStorageSize ,
141
+ usedCapacity : this . currentStorageUsage ,
141
142
} ;
142
143
}
143
144
const playbackPosition = this . currentPlayback . position ;
@@ -193,7 +194,7 @@ export class SegmentMemoryStorage implements SegmentStorage {
193
194
) ;
194
195
195
196
for ( const segmentData of sortedCache ) {
196
- const { streamId, segmentId } = segmentData ;
197
+ const { streamId, segmentId, data } = segmentData ;
197
198
const storageId = getStorageItemId ( streamId , segmentId ) ;
198
199
199
200
const shouldRemove = this . shouldRemoveSegment (
@@ -206,6 +207,8 @@ export class SegmentMemoryStorage implements SegmentStorage {
206
207
207
208
this . cache . delete ( storageId ) ;
208
209
affectedStreams . add ( streamId ) ;
210
+ this . decreaseStorageUsage ( data . byteLength ) ;
211
+
209
212
this . logger ( `Removed segment ${ segmentId } from stream ${ streamId } ` ) ;
210
213
211
214
if ( ! this . isMemoryLimitReached ( newSegmentSize ) && ! isLiveStream ) break ;
@@ -216,7 +219,7 @@ export class SegmentMemoryStorage implements SegmentStorage {
216
219
217
220
private isMemoryLimitReached ( segmentByteLength : number ) {
218
221
return (
219
- this . currentMemoryStorageSize + segmentByteLength / BYTES_PER_MiB >
222
+ this . currentStorageUsage + segmentByteLength / BYTES_PER_MiB >
220
223
this . segmentMemoryStorageLimit
221
224
) ;
222
225
}
@@ -257,6 +260,14 @@ export class SegmentMemoryStorage implements SegmentStorage {
257
260
return true ;
258
261
}
259
262
263
+ private increaseStorageUsage ( segmentByteLength : number ) {
264
+ this . currentStorageUsage += segmentByteLength / BYTES_PER_MiB ;
265
+ }
266
+
267
+ private decreaseStorageUsage ( segmentByteLength : number ) {
268
+ this . currentStorageUsage -= segmentByteLength / BYTES_PER_MiB ;
269
+ }
270
+
260
271
private setMemoryStorageLimit ( ) {
261
272
if ( this . coreConfig && this . coreConfig . segmentMemoryStorageLimit ) {
262
273
this . segmentMemoryStorageLimit =
0 commit comments