Another device, another peculiar side effect.
When trying to seek in a VOD stream, the player is not able to start from the desired position. It doesn't seem to matter which seek direction is used, both rewind & fast-forward have this issue.
General settings:
player = new RxPlayer({
maxBufferAhead: 30,
wantedBufferAhead: 20,
maxBufferBehind: 5,
baseBandwidth: 2500000
});
For this device we use DASH/PlayReady with these options:
player.loadVideo({
transport: "dash",
keySystems: [{
type: "playready",
getLicense: ...
getLicenseConfig: {
retry: 5,
timeout: 30000,
},
onKeyOutputRestricted: "fallback",
onKeyInternalError: "fallback",
disableMediaKeysAttachmentLock: true,
closeSessionsOnStop: true,
singleLicensePer: "init-data"
}],
autoPlay: true,
enableFastSwitching: false,
onCodecSwitch: "reload",
});
I've collected a log which are the result of seeking back from roughly 40 minutes to 30 minutes. These events are logged:
SI: Pushing segment strictly after previous one. – "audio" – 2490.0053333333335 – 2489.9839996666665
SI: synchronizing audio buffered ranges: – "2451.9893333333334-2491.989333"
SI: found true buffered end – "audio" – 2491.989333 – 2492.010666666667
SI: current audio inventory timeline:
2451.99|A|2492.01
[A] P: 1 || R: audio_eng=130001(130001)
SI: Pushing segment strictly after previous one. – "video" – 2490 – 2490
SI: synchronizing video buffered ranges: – "2452-2491.9616666666666"
SI: found true buffered end – "video" – 2491.9616666666666 – 2492
SI: current video inventory timeline:
2452.00|A|2457.96 ~ 2457.96|B|2461.96 ~ 2461.96|C|2467.96 ~ 2467.96|D|2475.96 ~ 2475.96|E|2492.00
[A] P: 1 || R: video_eng=326594(326594)
[B] P: 1 || R: video_eng=1645821(1645821)
[C] P: 1 || R: video_eng=2206671(2206671)
[D] P: 1 || R: video_eng=3832189(3832189)
[E] P: 1 || R: video_eng=6877196(6877196)
ABR: Choosing representation with bandwidth estimation. – 6877196 – "video_eng=6877196"
Stream: new video bitrate estimate – 24114081.821503717
API: current media element state tick – "event" – "timeupdate" – "position" – 2461.67 – "seeking" – 0 – "internalSeek" – false – "rebuffering" – false – "freezing" – false – "ended" – false – "paused" – false – "playbackRate" – 1 – "readyState" – 4 – "pendingPosition" – null
API: current playback timeline:
2452.00|==39.96==|2491.96
^2461.67 – "↵timeupdate"
SI: synchronizing video buffered ranges: – "2452-2491.9616666666666"
SI: current video inventory timeline:
2452.00|A|2457.96 ~ 2457.96|B|2461.96 ~ 2461.96|C|2467.96 ~ 2467.96|D|2475.96 ~ 2475.96|E|2491.96
[A] P: 1 || R: video_eng=326594(326594)
[B] P: 1 || R: video_eng=1645821(1645821)
[C] P: 1 || R: video_eng=2206671(2206671)
[D] P: 1 || R: video_eng=3832189(3832189)
[E] P: 1 || R: video_eng=6877196(6877196)
SI: synchronizing audio buffered ranges: – "2451.9893333333334-2491.989333"
SI: current audio inventory timeline:
2451.99|A|2491.99
[A] P: 1 || R: audio_eng=130001(130001)
ABR: Choosing representation with bandwidth estimation. – 6877196 – "video_eng=6877196"
API: API Seek to – 1836.67
API: current media element state tick – "event" – "seeking" – "position" – 1836.67 – "seeking" – 2 – "internalSeek" – false – "rebuffering" – true – "freezing" – false – "ended" – false – "paused" – false – "playbackRate" – 1 – "readyState" – 4 – "pendingPosition" – null
API: current playback timeline:
2452.00|==39.96==|2491.96
^1836.67 – "↵seeking"
SI: synchronizing video buffered ranges: – "2452-2491.9616666666666"
SI: current video inventory timeline:
2452.00|A|2457.96 ~ 2457.96|B|2461.96 ~ 2461.96|C|2467.96 ~ 2467.96|D|2475.96 ~ 2475.96|E|2491.96
[A] P: 1 || R: video_eng=326594(326594)
[B] P: 1 || R: video_eng=1645821(1645821)
[C] P: 1 || R: video_eng=2206671(2206671)
[D] P: 1 || R: video_eng=3832189(3832189)
[E] P: 1 || R: video_eng=6877196(6877196)
SI: synchronizing audio buffered ranges: – "2451.9893333333334-2491.989333"
SI: current audio inventory timeline:
2451.99|A|2491.99
[A] P: 1 || R: audio_eng=130001(130001)
ABR: enter starvation mode.
ABR: Choosing representation with bandwidth estimation. – 6877196 – "video_eng=6877196"
SQ: Media segments now need to be requested. Starting queue. – "video" – 16
SF: Beginning request – "video P: 1 A: 6 R: video_eng=6877196 S: 1836-2"
SQ: Media segments now need to be requested. Starting queue. – "audio" – 16
SF: Beginning request – "audio P: 1 A: 2 R: audio_eng=130001 S: 1836.0106666666666-2.005333333333333"
Init: Pause playback to build buffer
API: playerStateChange event – "SEEKING"
AVSB: receiving order to push data to the SourceBuffer – "audio" – "audio P: 1 A: 2 R: audio_eng=130001 S: 1836.0106666666666-2.005333333333333"
AVSB: pushing segment – "audio" – "audio P: 1 A: 2 R: audio_eng=130001 S: 1836.0106666666666-2.005333333333333"
SBI: receiving order to push data to the SourceBuffer – "audio"
SBI: pushing segment – "audio"
SF: Segment request ended with success – "audio P: 1 A: 2 R: audio_eng=130001 S: 1836.0106666666666-2.005333333333333"
SF: Beginning request – "audio P: 1 A: 2 R: audio_eng=130001 S: 1838.016-1.984"
AVSB: receiving order to push data to the SourceBuffer – "video" – "video P: 1 A: 6 R: video_eng=6877196 S: 1836-2"
AVSB: pushing segment – "video" – "video P: 1 A: 6 R: video_eng=6877196 S: 1836-2"
SBI: receiving order to push data to the SourceBuffer – "video"
SBI: updating codec – "video/mp4;codecs=\"avc1.640028\""
Could not call 'changeType' on the given SourceBuffer: – NotSupportedError: The operation is not supported. —
SBI: could not update codec – "video/mp4;codecs=\"avc1.640028\"" – "video/mp4;codecs=\"avc1.64000D\""
SBI: pushing segment – "video"
SF: Segment request ended with success – "video P: 1 A: 6 R: video_eng=6877196 S: 1836-2"
SF: Beginning request – "video P: 1 A: 6 R: video_eng=6877196 S: 1838-2"
AVSB: receiving order to push data to the SourceBuffer – "audio" – "audio P: 1 A: 2 R: audio_eng=130001 S: 1838.016-1.984"
AVSB: pushing segment – "audio" – "audio P: 1 A: 2 R: audio_eng=130001 S: 1838.016-1.984"
SBI: receiving order to push data to the SourceBuffer – "audio"
SF: Segment request ended with success – "audio P: 1 A: 2 R: audio_eng=130001 S: 1838.016-1.984"
AVSB: receiving order to push data to the SourceBuffer – "video" – "video P: 1 A: 6 R: video_eng=6877196 S: 1838-2"
AVSB: pushing segment – "video" – "video P: 1 A: 6 R: video_eng=6877196 S: 1838-2"
SBI: receiving order to push data to the SourceBuffer – "video"
SF: Segment request ended with success – "video P: 1 A: 6 R: video_eng=6877196 S: 1838-2"
SF: Beginning request – "audio P: 1 A: 2 R: audio_eng=130001 S: 1840-2.005333333333333"
SF: Beginning request – "video P: 1 A: 6 R: video_eng=6877196 S: 1840-2"
API: current media element state tick – "event" – "ratechange" – "position" – 2462.51 – "seeking" – 0 – "internalSeek" – false – "rebuffering" – false – "freezing" – false – "ended" – false – "paused" – false – "playbackRate" – 0 – "readyState" – 4 – "pendingPosition" – null
API: current playback timeline:
2452.00|==39.96==|2491.96
^2462.51 – "↵ratechange"
SI: synchronizing video buffered ranges: – "2452-2491.9616666666666"
SI: current video inventory timeline:
2452.00|A|2457.96 ~ 2457.96|B|2461.96 ~ 2461.96|C|2467.96 ~ 2467.96|D|2475.96 ~ 2475.96|E|2491.96
[A] P: 1 || R: video_eng=326594(326594)
[B] P: 1 || R: video_eng=1645821(1645821)
[C] P: 1 || R: video_eng=2206671(2206671)
[D] P: 1 || R: video_eng=3832189(3832189)
[E] P: 1 || R: video_eng=6877196(6877196)
SI: synchronizing audio buffered ranges: – "2451.9893333333334-2491.989333"
SI: current audio inventory timeline:
2451.99|A|2491.99
[A] P: 1 || R: audio_eng=130001(130001)
ABR: exit starvation mode.
ABR: Choosing representation with bandwidth estimation. – 6877196 – "video_eng=6877196"
Stream: new video bitrate estimate – 26173554.481545515
SQ: Next media segment changed, cancelling previous – "video"
SF: Segment request cancelled – "video P: 1 A: 6 R: video_eng=6877196 S: 1840-2"
SQ: Next media segment changed, cancelling previous – "audio"
SF: Segment request cancelled – "audio P: 1 A: 2 R: audio_eng=130001 S: 1840-2.005333333333333"
SF: Beginning request – "video P: 1 A: 6 R: video_eng=6877196 S: 2492-2"
SF: Beginning request – "audio P: 1 A: 2 R: audio_eng=130001 S: 2492.0106666666666-2.005333333333333"
Init: Resume playback speed – 1
API: playerStateChange event – "PLAYING"
SF: Segment request aborted – "video P: 1 A: 6 R: video_eng=6877196 S: 1840-2"
SF: Segment request aborted – "audio P: 1 A: 2 R: audio_eng=130001 S: 1840-2.005333333333333"
API: current media element state tick – "event" – "seeked" – "position" – 2462.51 – "seeking" – 0 – "internalSeek" – false – "rebuffering" – false – "freezing" – false – "ended" – false – "paused" – false – "playbackRate" – 1 – "readyState" – 4 – "pendingPosition" – null
API: current playback timeline:
2452.00|==39.96==|2491.96
^2462.51 – "↵seeked"
SI: synchronizing video buffered ranges: – "2452-2491.9616666666666"
SI: current video inventory timeline:
2452.00|A|2457.96 ~ 2457.96|B|2461.96 ~ 2461.96|C|2467.96 ~ 2467.96|D|2475.96 ~ 2475.96|E|2491.96
[A] P: 1 || R: video_eng=326594(326594)
[B] P: 1 || R: video_eng=1645821(1645821)
[C] P: 1 || R: video_eng=2206671(2206671)
[D] P: 1 || R: video_eng=3832189(3832189)
[E] P: 1 || R: video_eng=6877196(6877196)
SI: synchronizing audio buffered ranges: – "2451.9893333333334-2491.989333"
SI: current audio inventory timeline:
2451.99|A|2491.99
[A] P: 1 || R: audio_eng=130001(130001)
ABR: Choosing representation with bandwidth estimation. – 6877196 – "video_eng=6877196"
AVSB: receiving order to push data to the SourceBuffer – "audio" – "audio P: 1 A: 2 R: audio_eng=130001 S: 2492.0106666666666-2.005333333333333"
AVSB: pushing segment – "audio" – "audio P: 1 A: 2 R: audio_eng=130001 S: 2492.0106666666666-2.005333333333333"
SBI: receiving order to push data to the SourceBuffer – "audio"
SF: Segment request ended with success – "audio P: 1 A: 2 R: audio_eng=130001 S: 2492.0106666666666-2.005333333333333"
AVSB: receiving order to push data to the SourceBuffer – "video" – "video P: 1 A: 6 R: video_eng=6877196 S: 2492-2"
AVSB: pushing segment – "video" – "video P: 1 A: 6 R: video_eng=6877196 S: 2492-2"
SBI: receiving order to push data to the SourceBuffer – "video"
SF: Segment request ended with success – "video P: 1 A: 6 R: video_eng=6877196 S: 2492-2"
API: current media element state tick – "event" – "ratechange" – "position" – 2462.75 – "seeking" – 0 – "internalSeek" – false – "rebuffering" – false – "freezing" – false – "ended" – false – "paused" – false – "playbackRate" – 1 – "readyState" – 4 – "pendingPosition" – null
API: current playback timeline:
2452.00|==39.96==|2491.96
^2462.75 – "↵ratechange"
SI: synchronizing video buffered ranges: – "2452-2491.9616666666666"
SI: current video inventory timeline:
2452.00|A|2457.96 ~ 2457.96|B|2461.96 ~ 2461.96|C|2467.96 ~ 2467.96|D|2475.96 ~ 2475.96|E|2491.96
[A] P: 1 || R: video_eng=326594(326594)
[B] P: 1 || R: video_eng=1645821(1645821)
[C] P: 1 || R: video_eng=2206671(2206671)
[D] P: 1 || R: video_eng=3832189(3832189)
[E] P: 1 || R: video_eng=6877196(6877196)
SI: synchronizing audio buffered ranges: – "1835.9893333333334-1837.9946663333333,2451.9893333333334-2491.989333"
SI: current audio inventory timeline:
2451.99|A|2491.99
[A] P: 1 || R: audio_eng=130001(130001)
ABR: Choosing representation with bandwidth estimation. – 6877196 – "video_eng=6877196"
Stream: new video bitrate estimate – 27045554.483415287
MMSI: Merging 2 segments together for perf – "audio"
SBI: pushing segment – "audio"
SI: Segment pushed comes before all previous ones – "audio" – 1836.0106666666666 – 1838.0159999999998 – 2451.9893333333334
SI: synchronizing audio buffered ranges: – "1835.9893333333334-1837.9946663333333,2451.9893333333334-2491.989333"
SI: found true buffered start – "audio" – 1835.9893333333334 – 1836.0106666666666
SI: found true buffered end – "audio" – 1837.9946663333333 – 1838.0159999999998
SI: current audio inventory timeline:
1835.99|A|1837.99 ~ 2451.99|A|2491.99
[A] P: 1 || R: audio_eng=130001(130001)
MMSI: Merging 2 segments together for perf – "video"
SBI: updating codec – "video/mp4;codecs=\"avc1.640028\""
Could not call 'changeType' on the given SourceBuffer: – NotSupportedError: The operation is not supported. —
SBI: could not update codec – "video/mp4;codecs=\"avc1.640028\"" – "video/mp4;codecs=\"avc1.64000D\""
SBI: pushing segment – "video"
SI: Segment pushed comes before all previous ones – "video" – 1836 – 1838 – 2452
SI: synchronizing video buffered ranges: – "2452-2491.9616666666666"
SI: 1 segments GCed. – "video"
SI: current video inventory timeline:
2452.00|A|2457.96 ~ 2457.96|B|2461.96 ~ 2461.96|C|2467.96 ~ 2467.96|D|2475.96 ~ 2475.96|E|2491.96
[A] P: 1 || R: video_eng=326594(326594)
[B] P: 1 || R: video_eng=1645821(1645821)
[C] P: 1 || R: video_eng=2206671(2206671)
[D] P: 1 || R: video_eng=3832189(3832189)
[E] P: 1 || R: video_eng=6877196(6877196)
SI: Completed Segment not found – "1101600" – 1836
ABR: Incrementing blocking raise in BufferBasedChooser due to unstable quality – 15000
ABR: Choosing representation with bandwidth estimation. – 6877196 – "video_eng=6877196"
SI: Pushing segment strictly after previous one. – "audio" – 1838.016 – 1838.0159999999998
SI: synchronizing audio buffered ranges: – "1835.9893333333334-1839.9786663333334,2451.9893333333334-2493.9946663333335"
SI: found true buffered end – "audio" – 1839.9786663333334 – 1840
SI: current audio inventory timeline:
1835.99|A|1839.98 ~ 2451.99|A|2491.99
[A] P: 1 || R: audio_eng=130001(130001)
SI: Pushing segment strictly after previous one. – "audio" – 2492.0106666666666 – 2491.989333
SI: synchronizing audio buffered ranges: – "1835.9893333333334-1839.9786663333334,2451.9893333333334-2493.9946663333335"
SI: found true buffered end – "audio" – 2493.9946663333335 – 2494.016
SI: current audio inventory timeline:
1835.99|A|1839.98 ~ 2451.99|A|2494.02
[A] P: 1 || R: audio_eng=130001(130001)
SI: Segment pushed comes before all previous ones – "video" – 1838 – 1840 – 2452
SI: synchronizing video buffered ranges: – "2452-2493.9616666666666"
SI: 1 segments GCed. – "video"
SI: current video inventory timeline:
2452.00|A|2457.96 ~ 2457.96|B|2461.96 ~ 2461.96|C|2467.96 ~ 2467.96|D|2475.96 ~ 2475.96|E|2491.96
[A] P: 1 || R: video_eng=326594(326594)
[B] P: 1 || R: video_eng=1645821(1645821)
[C] P: 1 || R: video_eng=2206671(2206671)
[D] P: 1 || R: video_eng=3832189(3832189)
[E] P: 1 || R: video_eng=6877196(6877196)
SI: Completed Segment not found – "1102800" – 1838
SI: Pushing segment strictly after previous one. – "video" – 2492 – 2491.9616666666666
SI: synchronizing video buffered ranges: – "2452-2493.9616666666666"
SI: found true buffered end – "video" – 2493.9616666666666 – 2494
SI: current video inventory timeline:
2452.00|A|2457.96 ~ 2457.96|B|2461.96 ~ 2461.96|C|2467.96 ~ 2467.96|D|2475.96 ~ 2475.96|E|2494.00
[A] P: 1 || R: video_eng=326594(326594)
[B] P: 1 || R: video_eng=1645821(1645821)
[C] P: 1 || R: video_eng=2206671(2206671)
[D] P: 1 || R: video_eng=3832189(3832189)
[E] P: 1 || R: video_eng=6877196(6877196)
ABR: Choosing representation with bandwidth estimation. – 6877196 – "video_eng=6877196"
API: current media element state tick – "event" – "timeupdate" – "position" – 2463.75 – "seeking" – 0 – "internalSeek" – false – "rebuffering" – false – "freezing" – false – "ended" – false – "paused" – false – "playbackRate" – 1 – "readyState" – 4 – "pendingPosition" – null
API: current playback timeline:
2452.00|==41.96==|2493.96
^2463.75 – "↵timeupdate"
SI: synchronizing video buffered ranges: – "2452-2493.9616666666666"
SI: current video inventory timeline:
2452.00|A|2457.96 ~ 2457.96|B|2461.96 ~ 2461.96|C|2467.96 ~ 2467.96|D|2475.96 ~ 2475.96|E|2493.96
[A] P: 1 || R: video_eng=326594(326594)
[B] P: 1 || R: video_eng=1645821(1645821)
[C] P: 1 || R: video_eng=2206671(2206671)
[D] P: 1 || R: video_eng=3832189(3832189)
[E] P: 1 || R: video_eng=6877196(6877196)
SI: synchronizing audio buffered ranges: – "1835.9893333333334-1839.9786663333334,2451.9893333333334-2493.9946663333335"
SI: current audio inventory timeline:
1835.99|A|1839.98 ~ 2451.99|A|2493.99
[A] P: 1 || R: audio_eng=130001(130001)
ABR: Choosing representation with bandwidth estimation. – 6877196 – "video_eng=6877196"
API: current media element state tick – "event" – "timeupdate" – "position" – 2464.75 – "seeking" – 0 – "internalSeek" – false – "rebuffering" – false – "freezing" – false – "ended" – false – "paused" – false – "playbackRate" – 1 – "readyState" – 4 – "pendingPosition" – null
API: current playback timeline:
2452.00|==41.96==|2493.96
^2464.75 – "↵timeupdate"
SI: synchronizing video buffered ranges: – "2452-2493.9616666666666"
SI: current video inventory timeline:
2452.00|A|2457.96 ~ 2457.96|B|2461.96 ~ 2461.96|C|2467.96 ~ 2467.96|D|2475.96 ~ 2475.96|E|2493.96
[A] P: 1 || R: video_eng=326594(326594)
[B] P: 1 || R: video_eng=1645821(1645821)
[C] P: 1 || R: video_eng=2206671(2206671)
[D] P: 1 || R: video_eng=3832189(3832189)
[E] P: 1 || R: video_eng=6877196(6877196)
SI: synchronizing audio buffered ranges: – "1835.9893333333334-1839.9786663333334,2451.9893333333334-2493.9946663333335"
SI: current audio inventory timeline:
1835.99|A|1839.98 ~ 2451.99|A|2493.99
[A] P: 1 || R: audio_eng=130001(130001)
ABR: Choosing representation with bandwidth estimation. – 6877196 – "video_eng=6877196"
SQ: Media segments now need to be requested. Starting queue. – "video" – 1
SF: Beginning request – "video P: 1 A: 6 R: video_eng=6877196 S: 2494-2"
SQ: Media segments now need to be requested. Starting queue. – "audio" – 1
SF: Beginning request – "audio P: 1 A: 2 R: audio_eng=130001 S: 2494.016-1.984"
SF: Segment request cancelled – "audio P: 1 A: 2 R: audio_eng=130001 S: 2494.016-1.984"
SF: Segment request cancelled – "video P: 1 A: 6 R: video_eng=6877196 S: 2494-2"
SB: Aborting SegmentSink – "audio"
AVSB: Calling `dispose` on the SourceBufferInterface
SB: Aborting SegmentSink – "video"
AVSB: Calling `dispose` on the SourceBufferInterface
HTD: Stopping HTMLTextDisplayer
Init: Clearing HTMLMediaElement's src
Init: Revoking previous URL
Locking `contentLock` to clean-up the current content.
DRM: Clearing-up DRM session.
Another device, another peculiar side effect.
When trying to seek in a VOD stream, the player is not able to start from the desired position. It doesn't seem to matter which seek direction is used, both rewind & fast-forward have this issue.
General settings:
For this device we use DASH/PlayReady with these options:
I've collected a log which are the result of seeking back from roughly 40 minutes to 30 minutes. These events are logged: