@@ -430,9 +430,13 @@ export default class Hls implements HlsEventEmitter {
430
430
startLoad ( startPosition : number = - 1 ) {
431
431
logger . log ( `startLoad(${ startPosition } )` ) ;
432
432
this . started = true ;
433
- this . networkControllers . forEach ( ( controller ) => {
434
- controller . startLoad ( startPosition ) ;
435
- } ) ;
433
+ this . resumeBuffering ( ) ;
434
+ for ( let i = 0 ; i < this . networkControllers . length ; i ++ ) {
435
+ this . networkControllers [ i ] . startLoad ( startPosition ) ;
436
+ if ( ! this . started || ! this . networkControllers ) {
437
+ break ;
438
+ }
439
+ }
436
440
}
437
441
438
442
/**
@@ -441,32 +445,35 @@ export default class Hls implements HlsEventEmitter {
441
445
stopLoad ( ) {
442
446
logger . log ( 'stopLoad' ) ;
443
447
this . started = false ;
444
- this . networkControllers . forEach ( ( controller ) => {
445
- controller . stopLoad ( ) ;
446
- } ) ;
448
+ for ( let i = 0 ; i < this . networkControllers . length ; i ++ ) {
449
+ this . networkControllers [ i ] . stopLoad ( ) ;
450
+ if ( this . started || ! this . networkControllers ) {
451
+ break ;
452
+ }
453
+ }
447
454
}
448
455
449
456
/**
450
- * Resumes stream controller segment loading if previously started .
457
+ * Resumes stream controller segment loading after `pauseBuffering` has been called .
451
458
*/
452
459
resumeBuffering ( ) {
453
- if ( this . started ) {
454
- this . networkControllers . forEach ( ( controller ) => {
455
- if ( 'fragmentLoader' in controller ) {
456
- controller . startLoad ( - 1 ) ;
457
- }
458
- } ) ;
459
- }
460
+ logger . log ( `resume buffering` ) ;
461
+ this . networkControllers . forEach ( ( controller ) => {
462
+ if ( controller . resumeBuffering ) {
463
+ controller . resumeBuffering ( ) ;
464
+ }
465
+ } ) ;
460
466
}
461
467
462
468
/**
463
- * Stops stream controller segment loading without changing 'started' state like stopLoad() .
469
+ * Prevents stream controller from loading new segments until `resumeBuffering` is called .
464
470
* This allows for media buffering to be paused without interupting playlist loading.
465
471
*/
466
472
pauseBuffering ( ) {
473
+ logger . log ( `pause buffering` ) ;
467
474
this . networkControllers . forEach ( ( controller ) => {
468
- if ( 'fragmentLoader' in controller ) {
469
- controller . stopLoad ( ) ;
475
+ if ( controller . pauseBuffering ) {
476
+ controller . pauseBuffering ( ) ;
470
477
}
471
478
} ) ;
472
479
}
0 commit comments