videojs / http-streaming

HLS, DASH, and future HTTP streaming protocols library for video.js
https://videojs-http-streaming.netlify.app/
Other
2.53k stars 425 forks source link

Support For Low Latency HLS #721

Open SanatSharma opened 4 years ago

SanatSharma commented 4 years ago

Please do not delete the template, by filling out the required information we can investigate your issue more quickly.

Description

Apple recently released LL-HLS that allows super low-latency HLS. I was wondering when support for LL-HLS will be provided. They claim to have sub 2-sec latency, which would be great feature to have with (non-WebRTC) live streaming.

(https://developer.apple.com/documentation/http_live_streaming/protocol_extension_for_low-latency_hls_preliminary_specification)

welcome[bot] commented 4 years ago

👋 Thanks for opening your first issue here! 👋

If you're reporting a 🐞 bug, please make sure you include steps to reproduce it. We get a lot of issues on this repo, so please be patient and we will get back to you as soon as we can. To help make it easier for us to investigate your issue, please follow the contributing guidelines.

stale[bot] commented 4 years ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

gkatsev commented 4 years ago

Forgot to answer. We are aware of all the low latency HLS things but unfortunately we don't have the bandwidth (if you will) right now to work on it.

stale[bot] commented 4 years ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

jitendracodehacker commented 4 years ago

@SanatSharma Did you get any breakthrough for this LHLS support for Video JS ? or what is your workaround?

gkatsev commented 4 years ago

This is something we are likely going to be working in Q3.

SanatSharma commented 4 years ago

@jitendracodehacker we ended up using webrtc

Mariare2 commented 4 years ago

@gkatsev Have you been able to put any effort in it? Is there a planned release date on the LL HLS feature?

gkatsev commented 4 years ago

Unfortunately, we haven't been able to get started on this. We'll definitely make lots of noise when we get started on low latency streaming.

heennkkee commented 4 years ago

@SanatSharma Did you run WebRTC via video.js or did you end up with another player?

danielehrhardt commented 3 years ago

@SanatSharma Did you run WebRTC via video.js or did you end up with another player?

New Status on this?

gkatsev commented 3 years ago

FYI, Video.js 7.13 has preliminary support for LHLS. If you try it out, please let us know how it is. Requires setting experimentalLLHLS on the player.

n2quyet commented 3 years ago

FYI, Video.js 7.13 has preliminary support for LHLS. If you try it out, please let us know how it is. Requires setting experimentalLLHLS on the player.

I tried but it doesn't seem to work. the delay is about 20s, I also tried on theoplayer the delay is about 4s

Phillipip commented 3 years ago

Is there any working example? Unfortunately, it doesn't work for me in the demo player.

video-archivist-bot commented 3 years ago

Hey! We've detected some video files in a comment on this issue. If you'd like to permanently archive these videos and tie them to this project, a maintainer of the project can reply to this issue with the following commands:

gkatsev commented 3 years ago

Can you elaborate on what you mean by "doesn't work"? It's still early and experimental. Definitely not ready for production use. I'm sure there's more work to do for it.

Phillipip commented 3 years ago

Can you elaborate on what you mean by "doesn't work"?

I do not get LHLS, only HLS.

It's still early and experimental.

Under which example URL can we successfully test this experiment?

Definitely not ready for production use.

What is already working and what is not yet working? The delay is about 20s. LHLS should be less than 4s.

gkatsev commented 3 years ago

It seems to me that parts are getting download when available. Theoretically, it's all implemented, but it hasn't really gotten any testing and there's likely still bugs. We'll definitely make a big announcement when we think it's ready for people to use.

Phillipip commented 3 years ago

OK thank you!

dovelive commented 3 years ago

@gkatsev Hi. I have test the Experimental LL HLS feature of VHS at VHS test site. https://videojs-http-streaming.netlify.app/ However compare to the THEOplayer(https://www.theoplayer.com/ll-hls-test-page), the Experimental LL HLS feature of VHS has some delay(about 5-8 seconds). I was trying to change some config variables(e.g. GOAL_BUFFER_LENGTH, MAX_GOAL_BUFFER_LENGTH, etc...) in VHS, but there was no improvement. So I realized that the delay between THEOPlayer and VHS on LL HLS Streaming Playing couldn't be adjusted at this time. Would you like to make some progressive on decreasing the delay of LL HLS in VHS in the future. Regards.

gkatsev commented 3 years ago

@dovelive this is actually something that we're working on. We have a PR out that should improve our starting time https://github.com/videojs/http-streaming/pull/1201 (feel free to try it out in the netlify link). In my testing, once we've started, we do a decent job and staying around the same time. Once that PR is in, we can probably call LLHLS in beta. We do plan to eventually have some knobs that can be turned for LLHLS but it isn't available at this point. The current goal buffer config stuff don't really apply to LLHLS. Also, thanks for trying out!

dovelive commented 2 years ago

@gkatsev Hi. I have tested the http-streaming 2.12.0 on http-streaming test page.(https://videojs-http-streaming.netlify.app/) Since the logic related to the playback of the LLHLS stream was completed than before, it was confirmed that the videojs player played the LLHLS streaming almost the same time as the THEOPlayer.(https://www.theoplayer.com/ll-hls-test-page)

However, I have one question. In the THEOPlayer, user can move to any time by clicking any position in the Time Seekbar for the llhls stream. However, for the videojs, it can't. In other words, for the LLHLS stream, user cannot move to the desired time by clicking the on the SeekBar. (I have tested it using https://ll-hls-test.apple.com/llhls1/multi.m3u8)

So would you like to check and implement this feature on the videojs too?

Regards.

video-archivist-bot commented 2 years ago

Hey! We've detected some video files in a comment on this issue. If you'd like to permanently archive these videos and tie them to this project, a maintainer of the project can reply to this issue with the following commands:

gkatsev commented 2 years ago

@dovelive great to hear! For being able to seek in live streams, you need to enable liveui in Video.js. There's an option for it on https://videojs-http-streaming.netlify.app/ in the options tab panel. Worth noting that by default won't show it if the live window of the stream is less than 20 seconds in length because seeking in those streams is more likely to cause issues.

videojs('video', {
  liveui: true
});
dovelive commented 2 years ago

@gkatsev Thank you for contacting. Of course, I have tested LLHLS feature with liveui option checked. But SeekToLive control not working for this stream. - https://ll-hls-test.apple.com/llhls1/multi.m3u8 And the action of clicking the on latest point of the seekbar does not work either. Meanwhile THEOPlayer works fine for that stream too.(I mean SeekToLive button)

I am not sure there is a problem on that stream itself, however I want you to check it by yourself.

I hope my opinion would help for improving the performance of videojs player. Regards.

image

video-archivist-bot commented 2 years ago

Hey! We've detected some video files in a comment on this issue. If you'd like to permanently archive these videos and tie them to this project, a maintainer of the project can reply to this issue with the following commands:

gkatsev commented 2 years ago

This new apple stream is so far the only known issue for us. We haven't really had a chance to investigate further why this particular stream isn't working well. Other LLHLS streams that we tested work fine right now.

gkatsev commented 2 years ago

For those that haven't seen yet, there is LLHLS support now. It is flagged behind experimentalLLHLS. Ideally, you should also enable experimentalBufferBasedABR.

ChR-iSz commented 2 years ago

Do you habe more informations about experimentalBufferBasedABR ? Can't find any documentation for this...

getroot commented 2 years ago

image

The LLHLS feature of videojs seems to work well with OvenMediaEngine as well. But the player doesn't seem to use #EXT-X-PRELOAD-HINT. Is this a server and player compatibility issue? Or is this not implemented in the player yet? (THEO player loads #EXT-X-PRELOAD-HINT)

I tested this with the URL below.

https://videojs-http-streaming.netlify.app/?debug=false&autoplay=false&muted=false&fluid=false&minified=false&sync-workers=false&liveui=true&llhls=true&url=https%3A%2F%2Fome-dev.airensoft.com%3A13334 %2Fapp%2Fstream%2Fllhls.m3u8&type=application%2Fx-mpegURL&keysystems=&buffer-water=true&exact-manifest-timings=true&pixel-diff-selector=true&network-info=false&dts=true-offset=false&override-native=true&preload=

For information about OvenMediaEngine's LLHLS, please refer to the URL below.

https://github.com/AirenSoft/OvenMediaEngine/issues/766

ghost commented 1 year ago

Isn't this implemented in vhs now?