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

Delta playlist support #3644

Closed
ghouet opened this issue Mar 17, 2021 · 7 comments · Fixed by #3670
Closed

Delta playlist support #3644

ghouet opened this issue Mar 17, 2021 · 7 comments · Fixed by #3670
Labels
Milestone

Comments

@ghouet
Copy link

ghouet commented Mar 17, 2021

Is your feature request related to a problem? Please describe.
Part of the Apple low latency HLS specifications describes the Delta playlist feature. Each feature of LL-HLS can be used independently and we at Google are very interested in the client and server savings that the delta playlist updates feature can offer.

Describe the solution you'd like
We'd like that feature to be implemented as per apple specification. Testing head as of 2021 March 17th does not show the _HLS_skip=YES query parameter added to the media playlist request when #EXT-X-SERVER-CONTROL:CAN-SKIP-UNTIL={n} is advertised:
image

Describe alternatives you've considered
n/a

Additional context
See apple presentation about that specific feature:
https://developer.apple.com/videos/play/wwdc2020/10230/#:~:text=So%20Playlist%20Delta%20Updates%20are,version%20that's%20on%20the%20server.

@robwalch
Copy link
Collaborator

robwalch commented Mar 17, 2021

Hi @gramk,

Testing head as of 2021 March 17th does not show the _HLS_skip=YES query parameter added to the media playlist request when #EXT-X-SERVER-CONTROL:CAN-SKIP-UNTIL={n} is advertised:

Please fill out the Bug Report Template as part of your issue, making sure to include:

  • Test stream/page (if possible)
  • Steps to reproduce
  • Expected behavior
  • Actual behavior

I'll need the test stream you are using along with the expected and actual result. The latest release/head has support for delta playlists using the LL-HLS playlist samples provided by Apple (here's an example 🔊👂Cover your ears/mute first!). If you can reproduce the issues with their stream and describe how, or give me your stream and steps to repro I can investigate further.

we at Google are very interested in the client and server savings that the delta playlist updates feature can offer.

Then please also consider contributing to the project by debugging the issue, and suggesting fixes via PRs. Just pop over from the Network tab to the Sources tab. The LL-HLS project is covered here https://github.com/video-dev/hls.js/projects/7 and includes links to the changes for these features (#3060).

This is where SERVER-CONTROL is parsed if you're interested:
https://github.com/video-dev/hls.js/pull/3060/files#diff-77475850c023ed8d210fa4c336636cebd71004c6fb06b4552026b5942f8779cfR377

@ghouet
Copy link
Author

ghouet commented Mar 18, 2021

Thanks @robwalch. Here is the information you requested:

What version of Hls.js are you using?

v1.0.0-rc.3.0.canary.6981

What browser and OS are you using?

Chrome 89.0.4389.90

Test stream:

https://hls-js-dev.netlify.app/demo/?src=https%3A%2F%2Fdai.google.com%2Flinear%2Fhls%2Fevent%2FyWaDO8GzQiKuCOcLYGGFUQ%2Fmaster.m3u8&demoConfig=eyJlbmFibGVTdHJlYW1pbmciOnRydWUsImF1dG9SZWNvdmVyRXJyb3IiOnRydWUsInN0b3BPblN0YWxsIjpmYWxzZSwiZHVtcGZNUDQiOmZhbHNlLCJsZXZlbENhcHBpbmciOi0xLCJsaW1pdE1ldHJpY3MiOi0xfQ==

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

  • Start playing the stream on the provided link
  • Open the dev tools and notice the variant playlists are advertising the tag #EXT-X-SERVER-CONTROL:CAN-SKIP-UNTIL=60.0

Expected behavior

  • First variant playlist request should be the full playlist
  • Subsequent playlist requests should have the query parameter ?_HLS_skip=YES which tells the server to return delta playlists.

Actual behavior

  • query parameter ?_HLS_skip=YES is never added to the variant requests.

Console output

main.js:337 Using Hls.js config: {debug: true, enableWorker: true, lowLatencyMode: true, backBufferLength: 90}
logger.ts:74 [log] >
hls.ts:354 [log] > stopLoad
hls.ts:330 [log] > loadSource:https://dai.google.com/linear/hls/event/yWaDO8GzQiKuCOcLYGGFUQ/master.m3u8
stream-controller.ts:540 [log] > [stream-controller]: Trigger BUFFER_RESET
hls.ts:302 [log] > attachMedia
hls-js-dev.netlify.app/:1 Unchecked runtime.lastError: Could not establish connection. Receiving end does not exist.
buffer-controller.ts:721 [log] > [buffer-controller]: Media source opened
base-stream-controller.ts:1263 [log] > [subtitle-stream-controller]: STOPPED->IDLE
level-controller.ts:171 [log] > [level-controller]: manifest loaded, 9 level(s) found, first bitrate: 1928000
buffer-controller.ts:129 [log] > 1 bufferCodec event(s) expected
hls.ts:344 [log] > startLoad(-1)
level-controller.ts:250 [log] > [level-controller]: switching to level 5 from -1
level-controller.ts:523 [log] > [level-controller]: Attempt loading level index 5 with URL-id 0 https://dai.google.com/linear/hls/pa/event/yWaDO8GzQiKuCOcLYGGFUQ/stream/478ec6e9-3d6b-438e-8a14-1caeb8779830:TUL/variant/45f9a77f9ae59d68080a531f7a218fa4/bandwidth/1928000.m3u8
base-stream-controller.ts:1263 [log] > [stream-controller]: STOPPED->IDLE
base-stream-controller.ts:1263 [log] > [subtitle-stream-controller]: IDLE->STOPPED
base-stream-controller.ts:1263 [log] > [subtitle-stream-controller]: STOPPED->IDLE
xhr-loader.ts:250 Refused to get unsafe header "age"
getResponseHeader @ xhr-loader.ts:250
handlePlaylistLoaded @ playlist-loader.ts:692
handleTrackOrLevelPlaylist @ playlist-loader.ts:543
loadsuccess @ playlist-loader.ts:343
readystatechange @ xhr-loader.ts:183
XMLHttpRequest.send (async)
loadInternal @ xhr-loader.ts:125
load @ xhr-loader.ts:70
load @ playlist-loader.ts:307
onLevelLoading @ playlist-loader.ts:165
emit @ index.js:203
emit @ hls.ts:238
trigger @ hls.ts:246
loadPlaylist @ level-controller.ts:537
set @ level-controller.ts:267
set @ level-controller.ts:555
set @ hls.ts:469
startLoad @ stream-controller.ts:133
(anonymous) @ hls.ts:346
startLoad @ hls.ts:345
onManifestLoaded @ level-controller.ts:195
emit @ index.js:203
emit @ hls.ts:238
trigger @ hls.ts:246
handleMasterPlaylist @ playlist-loader.ts:448
loadsuccess @ playlist-loader.ts:345
readystatechange @ xhr-loader.ts:183
XMLHttpRequest.send (async)
loadInternal @ xhr-loader.ts:125
load @ xhr-loader.ts:70
load @ playlist-loader.ts:307
onManifestLoading @ playlist-loader.ts:152
emit @ index.js:203
emit @ hls.ts:238
trigger @ hls.ts:246
loadSource @ hls.ts:333
loadSelectedStream @ main.js:370
(anonymous) @ main.js:226
j @ jquery.min.js:2
fireWith @ jquery.min.js:2
ready @ jquery.min.js:2
I @ jquery.min.js:2
base-playlist-controller.ts:202 [log] > [level-controller]: reload live playlist 5 in 9996 ms
stream-controller.ts:604 [log] > [stream-controller]: Level 5 loaded [2323050,2323060], cc [193587, 193588] duration:109.95833
base-stream-controller.ts:1036 [log] > [stream-controller]: Live playlist - first load, unknown sliding
buffer-controller.ts:626 [log] > [buffer-controller]: Updating Media Source duration to 109.958
base-stream-controller.ts:1073 [log] > [stream-controller]: Configure startPosition to 79.96411002929688
base-stream-controller.ts:553 [log] > [stream-controller]: Loading fragment 2323058 cc: 193588 of [2323050-2323060] level: 5, target: 79.964
base-stream-controller.ts:1263 [log] > [stream-controller]: IDLE->FRAG_LOADING
transmuxer-interface.ts:66 [log] > demuxing in webworker
transmuxer-interface.ts:186 [log] > [transmuxer-interface, main]: Starting new transmux session for sn: 2323058 p: -1 level: 5 id: 1
        discontinuity: true
        trackSwitch: true
        contiguous: false
        accurateTimeOffset: false
        timeOffset: 79.95833
base-stream-controller.ts:327 [log] > [stream-controller]: Loaded fragment 2323058 of level 5
6bcd0575-f95c-47a1-a267-94077aa78c0c:603 [log] >
6bcd0575-f95c-47a1-a267-94077aa78c0c:2677 [log] > [mp4-remuxer]: ISGenerated flag reset
6bcd0575-f95c-47a1-a267-94077aa78c0c:2666 [log] > [mp4-remuxer]: initPTS & initDTS reset
6bcd0575-f95c-47a1-a267-94077aa78c0c:7535 [log] > manifest codec:undefined,ADTS data:type:2,sampleingIndex:4[44100Hz],channelConfig:2
6bcd0575-f95c-47a1-a267-94077aa78c0c:7697 [log] > parsed codec:mp4a.40.5,rate:44100,nb channel:2
6bcd0575-f95c-47a1-a267-94077aa78c0c:2836 [log] > [mp4-remuxer]: audio sampling rate : 44100
6bcd0575-f95c-47a1-a267-94077aa78c0c:947 [log] > [transmuxer.ts]: Flushed fragment 2323058 of level 5
base-stream-controller.ts:1263 [log] > [stream-controller]: FRAG_LOADING->PARSING
stream-controller.ts:1207 [log] > [stream-controller]: Init audio buffer, container:audio/mp4, codecs[selected/level/parsed]=[//mp4a.40.5]
stream-controller.ts:1218 [log] > [stream-controller]: Init video buffer, container:video/mp4, codecs[level/parsed]=[/avc1.4d401f]
buffer-controller.ts:685 [log] > [buffer-controller]: creating sourceBuffer(audio/mp4;codecs=mp4a.40.5)
buffer-controller.ts:685 [log] > [buffer-controller]: creating sourceBuffer(video/mp4;codecs=avc1.4d401f)
audio-stream-controller.ts:113 [log] > [audio-stream-controller]: InitPTS for cc: 193588 found from main: -4504381
base-stream-controller.ts:1263 [log] > [stream-controller]: PARSING->PARSED
stream-controller.ts:989 [log] > adjusting start position by 0.08456697070312202 to match buffer start
stream-controller.ts:995 [log] > [stream-controller]: seek to target start position 80.048677 from current time 0
base-stream-controller.ts:197 [log] > [stream-controller]: media seeking to 80.049, state: PARSED
base-stream-controller.ts:197 [log] > [audio-stream-controller]: media seeking to 80.049, state: STOPPED
base-stream-controller.ts:464 [log] > [stream-controller]: Buffered main sn: 2323058 of level 5 [80.049,89.943]
base-stream-controller.ts:1263 [log] > [stream-controller]: PARSED->IDLE
level-controller.ts:250 [log] > [level-controller]: switching to level 8 from 5
level-controller.ts:523 [log] > [level-controller]: Attempt loading level index 8 with URL-id 0 https://dai.google.com/linear/hls/pa/event/yWaDO8GzQiKuCOcLYGGFUQ/stream/478ec6e9-3d6b-438e-8a14-1caeb8779830:TUL/variant/d419df410d0d614d06e9ca0631c41e95/bandwidth/4628000.m3u8
base-stream-controller.ts:1263 [log] > [stream-controller]: IDLE->WAITING_LEVEL
stream-controller.ts:531 [log] > [stream-controller]: Media seeked to 80.049
base-playlist-controller.ts:202 [log] > [level-controller]: reload live playlist 8 in 9996 ms
stream-controller.ts:604 [log] > [stream-controller]: Level 8 loaded [2323050,2323060], cc [193587, 193588] duration:109.95833
base-stream-controller.ts:1036 [log] > [stream-controller]: Live playlist - first load, unknown sliding
discontinuities.ts:55 [log] > No frag in previous level to align on
discontinuities.ts:168 [log] > Adjusting PTS using programDateTime delta 0ms, sliding:0.000 https://dai.google.com/linear/hls/pa/event/yWaDO8GzQiKuCOcLYGGFUQ/stream/478ec6e9-3d6b-438e-8a14-1caeb8779830:TUL/variant/d419df410d0d614d06e9ca0631c41e95/bandwidth/4628000.m3u8 
base-stream-controller.ts:1263 [log] > [stream-controller]: WAITING_LEVEL->IDLE
base-stream-controller.ts:553 [log] > [stream-controller]: Loading fragment 2323059 cc: 193588 of [2323050-2323060] level: 8, target: 89.958
base-stream-controller.ts:1263 [log] > [stream-controller]: IDLE->FRAG_LOADING
buffer-controller.ts:626 [log] > [buffer-controller]: Updating Media Source duration to 109.958
transmuxer-interface.ts:186 [log] > [transmuxer-interface, main]: Starting new transmux session for sn: 2323059 p: -1 level: 8 id: 1
        discontinuity: false
        trackSwitch: true
        contiguous: false
        accurateTimeOffset: false
        timeOffset: 89.95833333333333
base-stream-controller.ts:327 [log] > [stream-controller]: Loaded fragment 2323059 of level 8
6bcd0575-f95c-47a1-a267-94077aa78c0c:2677 [log] > [mp4-remuxer]: ISGenerated flag reset
6bcd0575-f95c-47a1-a267-94077aa78c0c:2671 [log] > [mp4-remuxer]: reset next timestamp
6bcd0575-f95c-47a1-a267-94077aa78c0c:2677 [log] > [mp4-remuxer]: ISGenerated flag reset
6bcd0575-f95c-47a1-a267-94077aa78c0c:2666 [log] > [mp4-remuxer]: initPTS & initDTS reset
6bcd0575-f95c-47a1-a267-94077aa78c0c:7535 [log] > manifest codec:undefined,ADTS data:type:2,sampleingIndex:4[44100Hz],channelConfig:2
6bcd0575-f95c-47a1-a267-94077aa78c0c:7697 [log] > parsed codec:mp4a.40.5,rate:44100,nb channel:2
6bcd0575-f95c-47a1-a267-94077aa78c0c:2836 [log] > [mp4-remuxer]: audio sampling rate : 44100
6bcd0575-f95c-47a1-a267-94077aa78c0c:3242 [warn] > [mp4-remuxer]: Injecting 1 audio frame @ 89.943s due to 23 ms gap.
remuxAudio @ 6bcd0575-f95c-47a1-a267-94077aa78c0c:3242
remux @ 6bcd0575-f95c-47a1-a267-94077aa78c0c:2772
transmuxUnencrypted @ 6bcd0575-f95c-47a1-a267-94077aa78c0c:1023
transmux @ 6bcd0575-f95c-47a1-a267-94077aa78c0c:1010
push @ 6bcd0575-f95c-47a1-a267-94077aa78c0c:861
(anonymous) @ 6bcd0575-f95c-47a1-a267-94077aa78c0c:122
6bcd0575-f95c-47a1-a267-94077aa78c0c:947 [log] > [transmuxer.ts]: Flushed fragment 2323059 of level 8
base-stream-controller.ts:1263 [log] > [stream-controller]: FRAG_LOADING->PARSING
stream-controller.ts:1207 [log] > [stream-controller]: Init audio buffer, container:audio/mp4, codecs[selected/level/parsed]=[//mp4a.40.5]
stream-controller.ts:1218 [log] > [stream-controller]: Init video buffer, container:video/mp4, codecs[level/parsed]=[/avc1.4d401f]
base-stream-controller.ts:1263 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:464 [log] > [stream-controller]: Buffered main sn: 2323059 of level 8 [80.049,99.904]
base-stream-controller.ts:1263 [log] > [stream-controller]: PARSED->IDLE
base-stream-controller.ts:553 [log] > [stream-controller]: Loading fragment 2323060 cc: 193588 of [2323050-2323060] level: 8, target: 99.958
base-stream-controller.ts:1263 [log] > [stream-controller]: IDLE->FRAG_LOADING
base-stream-controller.ts:327 [log] > [stream-controller]: Loaded fragment 2323060 of level 8
6bcd0575-f95c-47a1-a267-94077aa78c0c:947 [log] > [transmuxer.ts]: Flushed fragment 2323060 of level 8
base-stream-controller.ts:1263 [log] > [stream-controller]: FRAG_LOADING->PARSING
base-stream-controller.ts:1263 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:464 [log] > [stream-controller]: Buffered main sn: 2323060 of level 8 [80.049,110.005]
base-stream-controller.ts:1263 [log] > [stream-controller]: PARSED->IDLE
level-controller.ts:523 [log] > [level-controller]: Attempt loading level index 8 with URL-id 0 https://dai.google.com/linear/hls/pa/event/yWaDO8GzQiKuCOcLYGGFUQ/stream/478ec6e9-3d6b-438e-8a14-1caeb8779830:TUL/variant/d419df410d0d614d06e9ca0631c41e95/bandwidth/4628000.m3u8
base-playlist-controller.ts:121 [log] > [level-controller]: live playlist 8 REFRESHED 2323061--1
base-playlist-controller.ts:202 [log] > [level-controller]: reload live playlist 8 in 9996 ms
stream-controller.ts:604 [log] > [stream-controller]: Level 8 loaded [2323051,2323061], cc [193587, 193588] duration:110.04867444444446
base-stream-controller.ts:1028 [log] > [stream-controller]: Live playlist sliding:10.000
base-stream-controller.ts:553 [log] > [stream-controller]: Loading fragment 2323061 cc: 193588 of [2323051-2323061] level: 8, target: 110.049
base-stream-controller.ts:1263 [log] > [stream-controller]: IDLE->FRAG_LOADING
buffer-controller.ts:626 [log] > [buffer-controller]: Updating Media Source duration to 120.049
base-stream-controller.ts:327 [log] > [stream-controller]: Loaded fragment 2323061 of level 8
6bcd0575-f95c-47a1-a267-94077aa78c0c:947 [log] > [transmuxer.ts]: Flushed fragment 2323061 of level 8
base-stream-controller.ts:1263 [log] > [stream-controller]: FRAG_LOADING->PARSING
base-stream-controller.ts:1263 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:464 [log] > [stream-controller]: Buffered main sn: 2323061 of level 8 [80.049,119.943]
base-stream-controller.ts:1263 [log] > [stream-controller]: PARSED->IDLE
favicon.ico:1 GET https://hls-js-dev.netlify.app/favicon.ico 404
level-controller.ts:523 [log] > [level-controller]: Attempt loading level index 8 with URL-id 0 https://dai.google.com/linear/hls/pa/event/yWaDO8GzQiKuCOcLYGGFUQ/stream/478ec6e9-3d6b-438e-8a14-1caeb8779830:TUL/variant/d419df410d0d614d06e9ca0631c41e95/bandwidth/4628000.m3u8
base-playlist-controller.ts:121 [log] > [level-controller]: live playlist 8 REFRESHED 2323062--1
base-playlist-controller.ts:202 [log] > [level-controller]: reload live playlist 8 in 9996 ms
stream-controller.ts:604 [log] > [stream-controller]: Level 8 loaded [2323052,2323062], cc [193587, 193588] duration:110.04867444444446
base-stream-controller.ts:1028 [log] > [stream-controller]: Live playlist sliding:20.000
base-stream-controller.ts:553 [log] > [stream-controller]: Loading fragment 2323062 cc: 193588 of [2323052-2323062] level: 8, target: 120.049
base-stream-controller.ts:1263 [log] > [stream-controller]: IDLE->FRAG_LOADING
buffer-controller.ts:626 [log] > [buffer-controller]: Updating Media Source duration to 130.049
base-stream-controller.ts:327 [log] > [stream-controller]: Loaded fragment 2323062 of level 8
6bcd0575-f95c-47a1-a267-94077aa78c0c:947 [log] > [transmuxer.ts]: Flushed fragment 2323062 of level 8
base-stream-controller.ts:1263 [log] > [stream-controller]: FRAG_LOADING->PARSING
base-stream-controller.ts:1263 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:464 [log] > [stream-controller]: Buffered main sn: 2323062 of level 8 [80.049,129.951]
base-stream-controller.ts:1263 [log] > [stream-controller]: PARSED->IDLE
level-controller.ts:523 [log] > [level-controller]: Attempt loading level index 8 with URL-id 0 https://dai.google.com/linear/hls/pa/event/yWaDO8GzQiKuCOcLYGGFUQ/stream/478ec6e9-3d6b-438e-8a14-1caeb8779830:TUL/variant/d419df410d0d614d06e9ca0631c41e95/bandwidth/4628000.m3u8
base-playlist-controller.ts:121 [log] > [level-controller]: live playlist 8 REFRESHED 2323063--1
base-playlist-controller.ts:202 [log] > [level-controller]: reload live playlist 8 in 9996 ms
stream-controller.ts:604 [log] > [stream-controller]: Level 8 loaded [2323053,2323063], cc [193587, 193588] duration:110.04867444444446
base-stream-controller.ts:1028 [log] > [stream-controller]: Live playlist sliding:30.000
base-stream-controller.ts:553 [log] > [stream-controller]: Loading fragment 2323063 cc: 193588 of [2323053-2323063] level: 8, target: 130.049
base-stream-controller.ts:1263 [log] > [stream-controller]: IDLE->FRAG_LOADING
buffer-controller.ts:626 [log] > [buffer-controller]: Updating Media Source duration to 140.049
base-stream-controller.ts:327 [log] > [stream-controller]: Loaded fragment 2323063 of level 8
6bcd0575-f95c-47a1-a267-94077aa78c0c:947 [log] > [transmuxer.ts]: Flushed fragment 2323063 of level 8
base-stream-controller.ts:1263 [log] > [stream-controller]: FRAG_LOADING->PARSING
base-stream-controller.ts:1263 [log] > [stream-controller]: PARSING->PARSED
base-stream-controller.ts:464 [log] > [stream-controller]: Buffered main sn: 2323063 of level 8 [80.049,140.005]
base-stream-controller.ts:1263 [log] > [stream-controller]: PARSED->IDLE

@robwalch
Copy link
Collaborator

robwalch commented Mar 22, 2021

Hi @ghouet,

Currently hls.js only supports delta updates with streams that also support block reload; The delta update URL parameter is only added to playlist requests after checking canBlockReload (CAN-BLOCK-RELOAD):
https://github.com/video-dev/hls.js/blob/v1.0.0-rc.5/src/controller/base-playlist-controller.ts#L139

@robwalch robwalch added this to Top priorities in Release Planning and Backlog via automation Mar 22, 2021
@robwalch robwalch added this to To do in Low-Latency HLS (LL-HLS) via automation Mar 22, 2021
@robwalch robwalch added this to the 1.0.0 milestone Mar 22, 2021
@robwalch robwalch moved this from To do to In progress in Low-Latency HLS (LL-HLS) Mar 22, 2021
@robwalch robwalch moved this from Top priorities to v1.0.0-rc.6 in Release Planning and Backlog Mar 22, 2021
@robwalch robwalch removed this from In progress in Low-Latency HLS (LL-HLS) Mar 22, 2021
@ghouet
Copy link
Author

ghouet commented Mar 22, 2021

Thanks so much Rob! Looks like it was a quick fix.
I just gave it a try and it looks good, player is behaving like it should.

@deepak-bomotix
Copy link

@robwalch @ghouet Can you please help me understand how/where the _hls_skip flag gets added from?

When I try inserting the same HLS URL at the following link, I do see the flag getting added: https://deploy-preview-3670--hls-js-dev.netlify.app/demo/?src=https%3A%2F%2Fdai.google.com%2Flinear%2Fhls%2Fevent%2FyWaDO8GzQiKuCOcLYGGFUQ%2Fmaster.m3u8&demoConfig=eyJlbmFibGVTdHJlYW1pbmciOnRydWUsImF1dG9SZWNvdmVyRXJyb3IiOnRydWUsInN0b3BPblN0YWxsIjpmYWxzZSwiZHVtcGZNUDQiOmZhbHNlLCJsZXZlbENhcHBpbmciOi0xLCJsaW1pdE1ldHJpY3MiOi0xfQ==

However, when I try using the URL with the demo page, it does not seem to add the flag: https://hlsjs.video-dev.org/demo/

Additional details: I tried using the HLS script from https://cdn.jsdelivr.net/npm/hls.js@1 - that too does not seem to add the flag

@robwalch
Copy link
Collaborator

robwalch commented Aug 31, 2023

Hi @deepak-bomotix,

This issue is closed. Please File a New Question or Bug Report.

@video-dev video-dev locked as resolved and limited conversation to collaborators Aug 31, 2023
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants