Low-Latency HLS (LLHLS) has been released #1068
Replies: 78 comments
-
Browsers in same device share a single tcp connection when connecting to the same server over HTTP/2. |
Beta Was this translation helpful? Give feedback.
-
|
Beta Was this translation helpful? Give feedback.
-
In LLHLS, |
Beta Was this translation helpful? Give feedback.
-
Amazing work ! thanks ! |
Beta Was this translation helpful? Give feedback.
-
@getroot - Is this in the v0.13.2 release? |
Beta Was this translation helpful? Give feedback.
-
Hello |
Beta Was this translation helpful? Give feedback.
-
@IanMitchell77 No. It was released today in pre-alpha version. This is currently available in the master branch. It will be fully tested and will be included in the next release. |
Beta Was this translation helpful? Give feedback.
-
Hi, great work! Amazing how active development is! |
Beta Was this translation helpful? Give feedback.
-
LLHLS should also work well on the edge. Of course, I recommend using a different HTTP cache server or CDN (like CloudFront) rather than OME as an edge for LLHLS. Please share your Server.xml and ovenmediaengine.log files. |
Beta Was this translation helpful? Give feedback.
-
Sure, here they are. Let me know if I can do anything else. Log: ovenmediaengine.log Config: Server_edge.txt |
Beta Was this translation helpful? Give feedback.
-
@heye Thanks to you I found the cause of LLHLS not working in OME Edge. I will fix this problem. Until then, please test in Origin. |
Beta Was this translation helpful? Give feedback.
-
@getroot congratulations and thank you for the hard work! Testing now and I see OME crashes with LLHLS added to my configuration. There is an output profile for Thumbnails in the same application that is using LLHLS and that is where the crash seems to happen:
|
Beta Was this translation helpful? Give feedback.
-
@bchah The |
Beta Was this translation helpful? Give feedback.
-
I've fixed LLHLS to work in edge mode. To operate LLHLS in Edge mode, the following settings are required.
|
Beta Was this translation helpful? Give feedback.
-
@bchah I solved this problem. Please confirm. |
Beta Was this translation helpful? Give feedback.
-
@JIEgOKOJI I recently fixed an issue causing TLS to crash. Could you please check if your problem is related to this? |
Beta Was this translation helpful? Give feedback.
-
Hey @getroot! I'm continuing to look at the architecture for LLHLS with OME, and I'm wondering if I get any benefit by using a caching proxy like NGINX using the Origin(1) <- Concentrator(1) <- Edge(n) pattern I mentioned in #774. If I request a ABR LLHLS playlist from OME at the edge, and each edge already has an OME edge server running on it, do I gain anything from adding a caching proxy? I would imagine the answer would be that I would gain viewer capacity at the expense of latency. From viewing the logs, it looks like OME already "caches" the stream it's consuming via OVT, which would mean my concentrator has a bandwidth requirement of Here is the NGINX config snippet I'm using: https://gist.github.com/cwpenhale/2d606e2d62f0519cf04aae55f736cb23 Thanks! |
Beta Was this translation helpful? Give feedback.
-
In your structure, it would be effective to use an HTTP Reverse Proxy Server instead of an OvenMediaEngine for Edge.
Just do the LLHLS packaging on the Relay Server once and let the HTTP Reverse Proxy Server (Edge) take and deliver it. This allows the edge server to operate with lower resources (because the edge does not do packaging for LLHLS) and all the edges have the same chunk and segment, so the player can play it naturally when it moves to another edge. And in this structure, you can hand over the role to a CDN like CloudFront instead of your edge. And on the Relay server, set the |
Beta Was this translation helpful? Give feedback.
-
does enabling http/2 come with keep-alive? |
Beta Was this translation helpful? Give feedback.
-
For clarity, the latest OME supports: HTTP/1.0 Keep-Alive Note that Keep-Alive is an unofficial specification that only exists in HTTP/1.0. |
Beta Was this translation helpful? Give feedback.
-
I tested the compatibility of videojs with OME and found it to work well. You can also test with videojs. |
Beta Was this translation helpful? Give feedback.
-
Hello. I copied the minimal configuration and I am running: docker run -p 1935:1935 -p 8080:8080 -p 3333:3333 -p 3478:3478 -p 8081:8081 -p 10006-10010:10006-10010/udp -v ${PWD}/examplellhls.xml:/opt/ovenmediaengine/bin/origin_conf/Server.xml airensoft/ovenmediaengine:latest but I get the error Do you have any idea what the problem could be? |
Beta Was this translation helpful? Give feedback.
-
@javier171188
|
Beta Was this translation helpful? Give feedback.
-
Thank you very much @dimiden , that was the problem and your commands solved it. |
Beta Was this translation helpful? Give feedback.
-
Hello, I am trying to implement llhls , and I'm using OvenPlayer. I tried the configuration let player = OvenPlayer.create(
I would appreciate any help or guidance that you can provide in this regard, thank you. |
Beta Was this translation helpful? Give feedback.
-
@javier171188 Hi. Your configuration should be working properly. let player = OvenPlayer.create(${ remoteConferenceName }, {
sources: [
{
type: "hls",
file: http://localhost:8080/app/${remoteConferenceName}/llhls.m3u8,
label: "conference",
},
],
autoStart: true,
autoFallback: true,
loop: true,
}); The minimum requirements are:
And any questions
What does it mean to work sometimes? And we'll add in the manual a clear configuration for low-latency hls streams like you suggested. Thank you. |
Beta Was this translation helpful? Give feedback.
-
Thanks for your answer @SangwonOh. I hope this is only a latency problem, do you have any recommendations about what parameters I should try to adjust? I would like to add that when I comment the bypass, codec, and bitrate for the audio in the configuration, the stream does not have sound, but the video loads perfectly all the time. I am really sorry but I am not sure how to express in a technical language the expression "work sometimes", so I will try to give an example. After starting the server, one user starts streaming localInput.startStreaming( then, in three different browsers, three users start to receive the stream let player = OvenPlayer.create( it takes less than 30 seconds to load the video and everything works fine. After that, the viewers stop the player player.remove(); and the streamer stops transmission localInput.remove(); I want to repeat the same process, but this time it takes more than a minute to load the stream. Since I never thought about a latency problem, I just closed everything assuming that something went wrong. Thanks for your time, I hope this is only a configuration issue. |
Beta Was this translation helpful? Give feedback.
-
@javier171188 Your system uses webrtc input. In this case(like conference), it is better to use the webrtc output. LLHLS takes some time to create the initial segments, so the stream will start taking more than ten seconds depending on your config. And LLHLS does not support opus audio sent by webrtc, so you have to encode it as aac in configuration. And LLHLS has a latency of around 3 seconds, so use webrtc playback which is less than 1 second. |
Beta Was this translation helpful? Give feedback.
-
@javier171188 And this is not a LLHLS issue, so please create a new issue |
Beta Was this translation helpful? Give feedback.
-
You can easily try OvenMediaEngine LLHLS on THEO Player's Demo page. |
Beta Was this translation helpful? Give feedback.
-
LLHLS is now available in the latest master branch.
LLHLS is a low-latency streaming protocol that aims at latency of about 2 to 4 seconds, unlike WebRTC's less than 1 second. But, as you know, it's HTTP-based, so you can deploy with an existing CDN.
LLHLS requires HTTP/2. And browsers only support TLS-based H2 soTLSPort
is essential.[2022.05.21 edited] LLHLS runs much higher performance over HTTP/2. Therefore, it is recommended to use TLS Port. OME supports LLHLS over HTTP/1.1 as some CDNs only use HTTP/1.1 to connect to Origin.
LLHLS playback URLs are in the following format:
https://domain[:TLS Port]/<App Name>/<Stream Name>/llhls.m3u8
The Server.xml example below is the minimum setting for RTMP Input / LLHLS Output.
If HTTP2 or LLHLS is set to<Enable>false</Enable> in <Modules>
, it will not work, so please check this part. If<Modules>
is not in Server.xml, it is enabled by default.You can test with the following players.
OvenPlayer: https://demo.ovenplayer.com
THEO Player: https://www.theoplayer.com/ll-hls-test-page
Mac, iOS Safari Browser : Older versions do not support LLHLS, so please use the latest version of Safari.
And many other players support LLHLS.
Thanks a lot for your feedback!
Beta Was this translation helpful? Give feedback.
All reactions