Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

miss cuechange event at id3 timed-metadata textTrack #3879

Closed
5 tasks done
monyone opened this issue May 10, 2021 · 4 comments · Fixed by #4719
Closed
5 tasks done

miss cuechange event at id3 timed-metadata textTrack #3879

monyone opened this issue May 10, 2021 · 4 comments · Fixed by #4719

Comments

@monyone
Copy link

monyone commented May 10, 2021

What version of Hls.js are you using?

v1.0.2

What browser and OS (including versions) are you using?

Android Chrome, Windows chrome, Edge, firefox, MacOS chrome, Firefox, Safari
(especially Android Chrome)

Test stream:

Test stream has id3 timed metadata per 1 sec. TXXX records has sequencial number.

https://monyone.github.io/hls-sample-test-stream/id3-boundary/output.m3u8

https://hls-js.netlify.app/demo/?src=https%3A%2F%2Fmonyone.github.io%2Fhls-sample-test-stream%2Fid3-boundary%2Foutput.m3u8&demoConfig=eyJlbmFibGVTdHJlYW1pbmciOnRydWUsImF1dG9SZWNvdmVyRXJyb3IiOnRydWUsInN0b3BPblN0YWxsIjpmYWxzZSwiZHVtcGZNUDQiOmZhbHNlLCJsZXZlbENhcHBpbmciOi0xLCJsaW1pdE1ldHJpY3MiOi0xfQ==

https://hls-js-dev.netlify.app/demo/?src=https%3A%2F%2Fmonyone.github.io%2Fhls-sample-test-stream%2Fid3-boundary%2Foutput.m3u8&demoConfig=eyJlbmFibGVTdHJlYW1pbmciOnRydWUsImF1dG9SZWNvdmVyRXJyb3IiOnRydWUsInN0b3BPblN0YWxsIjpmYWxzZSwiZHVtcGZNUDQiOmZhbHNlLCJsZXZlbENhcHBpbmciOi0xLCJsaW1pdE1ldHJpY3MiOi0xfQ==

for demo, write console below code to check cuechange event detection.
$('video')[0].textTracks[0].oncuechange = (event) => { const cues = event.target.activeCues; if (cues.length >= 1){ console.log(cues[cues.length - 1].value.data) }}

Configuration:

{
  "debug": true,
  "enableWorker": true,
  "lowLatencyMode": true,
  "backBufferLength": 90
}

Checklist

  • The stream has correct Access-Control-Allow-Origin headers (CORS)
  • There are no network errors such as 404s in the browser console when trying to play the stream

Steps to reproduce

  1. load sample stream
  2. listen to hls.js's id3 textTrack cuechange event

Expected behavior

Same as native Safari player's behavior.

Indifinite id3 (not found next id3) cue's endtime set infinite temporarily. (for example, Number.MAX_VALUE)
set indifinite cue's endtime to next id3 cue arrived.

Actual behavior

Indifinite id3 cue ended in segment boundary.
In test stream case, may not call id3 track's cue cuechange event.
(too short duration id3 cue may not call cuechange event)

Console output

Using Hls.js config: 
Object { debug: true, enableWorker: true, lowLatencyMode: true, backBufferLength: 90 }
main.js:338:10
[log] > logger.ts:74:21
[log] > stopLoad hls.ts:365:11
[log] > loadSource:https://monyone.github.io/hls-sample-test-stream/id3-boundary/output.m3u8 hls.ts:333:11
[log] > [stream-controller]: Trigger BUFFER_RESET stream-controller.ts:548:9
[log] > attachMedia hls.ts:304:11
[log] > [buffer-controller]: Media source opened buffer-controller.ts:743:11
[log] > [subtitle-stream-controller]: STOPPED->IDLE base-stream-controller.ts:1303:11
[log] > [level-controller]: manifest loaded, 1 level(s) found, first bitrate: 0 level-controller.ts:171:15
[log] > 1 bufferCodec event(s) expected buffer-controller.ts:136:11
[log] > startLoad(-1) hls.ts:355:11
[log] > [level-controller]: switching to level 0 from -1 level-controller.ts:250:9
[log] > [stream-controller]: STOPPED->IDLE base-stream-controller.ts:1303:11
[log] > [subtitle-stream-controller]: IDLE->STOPPED base-stream-controller.ts:1303:11
[log] > [subtitle-stream-controller]: STOPPED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Level 0 loaded [0,34], cc [0, 0] duration:34.333332999999996 stream-controller.ts:612:9
[log] > [buffer-controller]: Updating Media Source duration to 34.333 buffer-controller.ts:635:13
[log] > [stream-controller]: Loading fragment 0 cc: 0 of [0-34] level: 0, target: 0 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
GEThttps://hls-js.netlify.app/favicon.ico
[HTTP/2 404 Not Found 151ms]

[log] > demuxing in webworker transmuxer-interface.ts:66:13
[log] > [transmuxer-interface, main]: Starting new transmux session for sn: 0 p: -1 level: 0 id: 1
        discontinuity: true
        trackSwitch: true
        contiguous: false
        accurateTimeOffset: true
        timeOffset: 0 transmuxer-interface.ts:180:13
[log] > [stream-controller]: Loaded fragment 0 of level 0 base-stream-controller.ts:334:15
[log] > ad3ce6f7-110a-4d53-9a65-d64381b80906:603:22
[log] > [mp4-remuxer]: ISGenerated flag reset ad3ce6f7-110a-4d53-9a65-d64381b80906:2692:58
[log] > [mp4-remuxer]: initPTS & initDTS reset ad3ce6f7-110a-4d53-9a65-d64381b80906:2681:58
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [transmuxer.ts]: Flushed fragment 0 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: Init video buffer, container:video/mp4, codecs[level/parsed]=[/avc1.64100d] stream-controller.ts:1225:11
[log] > [buffer-controller]: creating sourceBuffer(video/mp4;codecs=avc1.64100d) buffer-controller.ts:704:15
[log] > [audio-stream-controller]: InitPTS for cc: 0 found from main: 126000 audio-stream-controller.ts:112:11
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 0 of level 0 [0.000,1.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 1 cc: 0 of [0-34] level: 0, target: 1.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 1 of level 0 base-stream-controller.ts:334:15
[log] > [transmuxer.ts]: Flushed fragment 1 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 1 of level 0 [0.000,2.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 2 cc: 0 of [0-34] level: 0, target: 2.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 2 of level 0 base-stream-controller.ts:334:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [transmuxer.ts]: Flushed fragment 2 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 2 of level 0 [0.000,3.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 3 cc: 0 of [0-34] level: 0, target: 3.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 3 of level 0 base-stream-controller.ts:334:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [transmuxer.ts]: Flushed fragment 3 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 3 of level 0 [0.000,4.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 4 cc: 0 of [0-34] level: 0, target: 4.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 4 of level 0 base-stream-controller.ts:334:15
[log] > [transmuxer.ts]: Flushed fragment 4 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 4 of level 0 [0.000,5.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 5 cc: 0 of [0-34] level: 0, target: 5.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 5 of level 0 base-stream-controller.ts:334:15
[log] > [transmuxer.ts]: Flushed fragment 5 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 5 of level 0 [0.000,6.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 6 cc: 0 of [0-34] level: 0, target: 6.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 6 of level 0 base-stream-controller.ts:334:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [transmuxer.ts]: Flushed fragment 6 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 6 of level 0 [0.000,7.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 7 cc: 0 of [0-34] level: 0, target: 7.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 7 of level 0 base-stream-controller.ts:334:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [transmuxer.ts]: Flushed fragment 7 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 7 of level 0 [0.000,8.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 8 cc: 0 of [0-34] level: 0, target: 8.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 8 of level 0 base-stream-controller.ts:334:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [transmuxer.ts]: Flushed fragment 8 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 8 of level 0 [0.000,9.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 9 cc: 0 of [0-34] level: 0, target: 9.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 9 of level 0 base-stream-controller.ts:334:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [transmuxer.ts]: Flushed fragment 9 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 9 of level 0 [0.000,10.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 10 cc: 0 of [0-34] level: 0, target: 10.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 10 of level 0 base-stream-controller.ts:334:15
[log] > [transmuxer.ts]: Flushed fragment 10 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 10 of level 0 [0.000,11.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 11 cc: 0 of [0-34] level: 0, target: 11.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 11 of level 0 base-stream-controller.ts:334:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [transmuxer.ts]: Flushed fragment 11 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 11 of level 0 [0.000,12.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 12 cc: 0 of [0-34] level: 0, target: 12.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 12 of level 0 base-stream-controller.ts:334:15
[log] > [transmuxer.ts]: Flushed fragment 12 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 12 of level 0 [0.000,13.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 13 cc: 0 of [0-34] level: 0, target: 13.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 13 of level 0 base-stream-controller.ts:334:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [transmuxer.ts]: Flushed fragment 13 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 13 of level 0 [0.000,14.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 14 cc: 0 of [0-34] level: 0, target: 14.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 14 of level 0 base-stream-controller.ts:334:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [transmuxer.ts]: Flushed fragment 14 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 14 of level 0 [0.000,15.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 15 cc: 0 of [0-34] level: 0, target: 15.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 15 of level 0 base-stream-controller.ts:334:15
[log] > [transmuxer.ts]: Flushed fragment 15 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 15 of level 0 [0.000,16.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 16 cc: 0 of [0-34] level: 0, target: 16.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 16 of level 0 base-stream-controller.ts:334:15
[log] > [transmuxer.ts]: Flushed fragment 16 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 16 of level 0 [0.000,17.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 17 cc: 0 of [0-34] level: 0, target: 17.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 17 of level 0 base-stream-controller.ts:334:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [transmuxer.ts]: Flushed fragment 17 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 17 of level 0 [0.000,18.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 18 cc: 0 of [0-34] level: 0, target: 18.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 18 of level 0 base-stream-controller.ts:334:15
[log] > [transmuxer.ts]: Flushed fragment 18 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 18 of level 0 [0.000,19.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 19 cc: 0 of [0-34] level: 0, target: 19.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 19 of level 0 base-stream-controller.ts:334:15
[log] > [transmuxer.ts]: Flushed fragment 19 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 19 of level 0 [0.000,20.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 20 cc: 0 of [0-34] level: 0, target: 20.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 20 of level 0 base-stream-controller.ts:334:15
[log] > [transmuxer.ts]: Flushed fragment 20 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 20 of level 0 [0.000,21.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 21 cc: 0 of [0-34] level: 0, target: 21.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 21 of level 0 base-stream-controller.ts:334:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [transmuxer.ts]: Flushed fragment 21 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 21 of level 0 [0.000,22.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 22 cc: 0 of [0-34] level: 0, target: 22.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 22 of level 0 base-stream-controller.ts:334:15
[log] > [transmuxer.ts]: Flushed fragment 22 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 22 of level 0 [0.000,23.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 23 cc: 0 of [0-34] level: 0, target: 23.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 23 of level 0 base-stream-controller.ts:334:15
[log] > [transmuxer.ts]: Flushed fragment 23 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 23 of level 0 [0.000,24.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 24 cc: 0 of [0-34] level: 0, target: 24.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 24 of level 0 base-stream-controller.ts:334:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [transmuxer.ts]: Flushed fragment 24 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 24 of level 0 [0.000,25.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 25 cc: 0 of [0-34] level: 0, target: 25.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 25 of level 0 base-stream-controller.ts:334:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [transmuxer.ts]: Flushed fragment 25 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 25 of level 0 [0.000,26.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 26 cc: 0 of [0-34] level: 0, target: 26.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 26 of level 0 base-stream-controller.ts:334:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [transmuxer.ts]: Flushed fragment 26 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 26 of level 0 [0.000,27.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 27 cc: 0 of [0-34] level: 0, target: 27.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 27 of level 0 base-stream-controller.ts:334:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [transmuxer.ts]: Flushed fragment 27 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 27 of level 0 [0.000,28.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 28 cc: 0 of [0-34] level: 0, target: 28.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 28 of level 0 base-stream-controller.ts:334:15
[log] > [transmuxer.ts]: Flushed fragment 28 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 28 of level 0 [0.000,29.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 29 cc: 0 of [0-34] level: 0, target: 29.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 29 of level 0 base-stream-controller.ts:334:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [transmuxer.ts]: Flushed fragment 29 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 29 of level 0 [0.000,30.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 30 cc: 0 of [0-34] level: 0, target: 30.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 30 of level 0 base-stream-controller.ts:334:15
[log] > [transmuxer.ts]: Flushed fragment 30 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 30 of level 0 [0.000,31.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 31 cc: 0 of [0-34] level: 0, target: 31.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 31 of level 0 base-stream-controller.ts:334:15
[log] > [transmuxer.ts]: Flushed fragment 31 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 31 of level 0 [0.000,32.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 32 cc: 0 of [0-34] level: 0, target: 32.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 32 of level 0 base-stream-controller.ts:334:15
[log] > [transmuxer.ts]: Flushed fragment 32 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 32 of level 0 [0.000,33.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 33 cc: 0 of [0-34] level: 0, target: 33.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 33 of level 0 base-stream-controller.ts:334:15
[log] > [transmuxer.ts]: Flushed fragment 33 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 33 of level 0 [0.000,34.033] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loading fragment 34 cc: 0 of [0-34] level: 0, target: 34.033 base-stream-controller.ts:563:9
[log] > [stream-controller]: IDLE->FRAG_LOADING base-stream-controller.ts:1303:11
[log] > [stream-controller]: Loaded fragment 34 of level 0 base-stream-controller.ts:334:15
[log] > [stream-controller]: FRAG_LOADING->PARSING base-stream-controller.ts:1303:11
[log] > [transmuxer.ts]: Flushed fragment 34 of level 0 ad3ce6f7-110a-4d53-9a65-d64381b80906:935:59
[log] > [stream-controller]: PARSING->PARSED base-stream-controller.ts:1303:11
[log] > [stream-controller]: Buffered main sn: 34 of level 0 [0.000,34.333] base-stream-controller.ts:474:9
[log] > [stream-controller]: PARSED->IDLE base-stream-controller.ts:1303:11
[log] > [buffer-controller]: video sourceBuffer now EOS buffer-controller.ts:508:17
[log] > [stream-controller]: IDLE->ENDED base-stream-controller.ts:1303:11
[log] > [buffer-controller]: Media source ended buffer-controller.ts:761:11
@robwalch
Copy link
Collaborator

robwalch commented May 16, 2021

currentTime must intersect with a cue's range on "timeupdate" for the cue to become active. If you have cues with subsecond duration, it is likely that playback will pass over them without an active change or "cuechange" event. This TextTrack behavior is implemented on the browser/JavaScrip level and not in HLS.js. Options to workaround this include:

  • use longer cues in your media (like the whole segment, and if you care about the end of a segment observe when the cue becomes inactive)
  • extend the duration of your cues after hls.js parses and appends them
  • implement your own method for observing cue activity rather than relying on cuechange events (these are browser APIs and not implemented by HLS.js)

@robwalch robwalch added answered Browser issue If there is an underlying issue with the browser that hls.js is running on, this tag should be used. labels May 16, 2021
@monyone
Copy link
Author

monyone commented May 18, 2021

Hi @robwalch
This issue aims to hls.js' VTTCue (ID3 metadata) generation issue. Not Browser issue.

Test stream has ID3 timed metadata per 1 seconds.
And each ID3 Cue has 1 seconds duration expected.
https://monyone.github.io/hls-sample-test-stream/id3-boundary/output.m3u8

Above playlist played in Safari, Every DataCue's duration are 1 seconds. (Please watch in Safari)
In Safari, ID3 DataCue's endtime set infinite temporarily, then set indifinite cue's endtime to next id3 cue arrived.

But played in hls.js, second or subsequent VTTCue's duration is too short (almost 1 frame).
These cue doesn't appear in TextTrack's activeCues which is hls.js genereted.

This hls.js' behavior is occured here.
If ID3 metadata appeared in near end of fragment, it's duration is too short as expected (not same as Safari).

@robwalch robwalch added this to the 1.1.0 milestone May 19, 2021
@robwalch robwalch added Needs Triage If there is a suspected stream issue, apply this label to triage if it is something we should fix. Spec Compliance and removed Browser issue If there is an underlying issue with the browser that hls.js is running on, this tag should be used. answered labels May 19, 2021
@robwalch
Copy link
Collaborator

Hi @monyone,

Do you have any other sample streams with ID3 metadata that I can use to work on this issue?

The sample you provided is excellent. I will use it.

What would also be helpful is to have another example where some segments do not contain ID3, as well as one which discontinuities.

I want to confirm that the unbound cues always span to the end of the stream or the next cue, even when spanning discontinuities and segment boundaries.

I confirmed this behavior in Safari 14 (DataCue endTime is set to duration or playlist end, until the previous cue becomes active at which point its endTime is updated to the start of the next cue). We can implement something similar in v1.1, some users may see this as a breaking change, but I can argue as you have put forth here that the current behavior of ending the cue at the end of the segment it is found in is incorrect. Hls.js can update cue.endTime as soon as the following cue is appended to the text track.

@monyone
Copy link
Author

monyone commented May 20, 2021

Hi @robwalch

Here is a another ID3 inserted VOD sample stream. It is inserted randomly, some segments do not contain ID3.
https://monyone.github.io/hls-sample-test-stream/id3-random/output.m3u8

I'm not able to prepare LIVE and EVENT type of ID3 sample stream. Sorry for inconvinience.
In Safari, ID3 DataCue's endtime set infinite temporarily in LIVE or EVENT playlist. (DataCue allows to set infinite endtime)

If you check LIVE or EVENT ID3 sample stream, please use ffmpeg to generate it.
Above sample stream's source is here, and map ID3 metadata to generate HLS playlist.

If you generate sample stream for LIVE, please just do this.

ffmpeg -re -stream_loop -1 -i id3_random.ts -c:v libx264 -map 0 -f hls -hls_time 3 -g 30 -keyint_min 30 -sc_threshold 0 -hls_flags delete_segments id3_random.m3u8

To generate sample stream for EVENT, please just do this.

ffmpeg -re -stream_loop -1 -i id3_random.ts -c:v libx264 -map 0 -f hls -hls_playlist_type event -hls_time 3 -g 30 -keyint_min 30 -sc_threshold 0 id3_random.m3u8

@robwalch robwalch modified the milestones: 1.1.0, 1.2.0 Nov 10, 2021
@robwalch robwalch removed the Needs Triage If there is a suspected stream issue, apply this label to triage if it is something we should fix. label May 18, 2022
robwalch added a commit that referenced this issue Jun 2, 2022
@robwalch robwalch moved this to Top priorities in HLS.js Release Planning and Backlog Dec 1, 2022
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
2 participants