@@ -459,7 +459,21 @@ class FlvPlayer {
459
459
_internalSeek ( seconds ) {
460
460
let directSeek = this . _isTimepointBuffered ( seconds ) ;
461
461
462
- if ( directSeek ) { // buffered position
462
+ let directSeekBegin = false ;
463
+ let directSeekBeginTime = 0 ;
464
+
465
+ if ( seconds < 1.0 ) {
466
+ let videoBeginTime = this . _mediaElement . buffered . start ( 0 ) ;
467
+ if ( videoBeginTime < 1.0 && seconds < videoBeginTime ) {
468
+ directSeekBegin = true ;
469
+ directSeekBeginTime = videoBeginTime ;
470
+ }
471
+ }
472
+
473
+ if ( directSeekBegin ) { // seek to video begin, set currentTime directly if beginPTS buffered
474
+ this . _requestSetTime = true ;
475
+ this . _mediaElement . currentTime = directSeekBeginTime ;
476
+ } else if ( directSeek ) { // buffered position
463
477
if ( ! this . _alwaysSeekKeyframe ) {
464
478
this . _requestSetTime = true ;
465
479
this . _mediaElement . currentTime = seconds ;
@@ -530,6 +544,16 @@ class FlvPlayer {
530
544
this . _requestSetTime = false ;
531
545
return ;
532
546
}
547
+
548
+ if ( target < 1.0 ) { // seek to video begin, set currentTime directly if beginPTS buffered
549
+ let videoBeginTime = this . _mediaElement . buffered . start ( 0 ) ;
550
+ if ( videoBeginTime < 1.0 && target < videoBeginTime ) {
551
+ this . _requestSetTime = true ;
552
+ this . _mediaElement . currentTime = videoBeginTime ;
553
+ return ;
554
+ }
555
+ }
556
+
533
557
if ( this . _isTimepointBuffered ( target ) ) {
534
558
if ( this . _alwaysSeekKeyframe ) {
535
559
let idr = this . _msectl . getNearestKeyframe ( Math . floor ( target * 1000 ) ) ;
0 commit comments