LL-HLS broadcasting

Hello everyone! I am trying to make LL-HLS broadcasting work. I used the demo from webrtc_to_hls and setup partial_segment_duration to 500ms, and got # Logger.warning("File storage does not support LL-HLS. The partial segment is omitted.") On further investigation on source code I couldn't find Membrane.HTTPAdaptiveStream.Storages.FileStorage function to store partial segments properly. How can I achieve LL-HLS with Membrane framework? PS: Also, for LL-HLS, i believe, the HLS Controller should be slightly different, because it should send not full files but parts of them depending on a request (even when those files are still in editing mode)
K
karolkonkol42d ago
HI @kurmetaubanov The webrtc_to_hls demo only handles regular HLS. We have two projects that use LL-HLS and both of them implement custom storage and controller for LL-HLS. * Jellyfish (SFU) - https://github.com/jellyfish-dev/jellyfish * Membrane Live - https://github.com/membraneframework-labs/membrane_live
GitHub
GitHub - jellyfish-dev/jellyfish: General purpose media server. Sup...
General purpose media server. Supports WebRTC, HLS, RTSP, SIP - jellyfish-dev/jellyfish
GitHub
GitHub - membraneframework-labs/membrane_live: Webinar app in React...
Webinar app in React, Phoenix and Membrane. Contribute to membraneframework-labs/membrane_live development by creating an account on GitHub.
K
kurmetaubanov36d ago
wow, that's cool, i am going to watch it now! hi @karolkonkol I created HTTPAdaptiveStream.Storage behaviour to handle LL-HLS, the only thing i changed was lines to write partial segments as files using their own names from metadata. That worked for hls.js player, but iPhone still stucks without playing (just blank screen on the player, with progress rolling infinitely). I went to Apple developer HLS examples pages and iPhone's playlist looks like ranged segments that should be sent with 206 response. I tried to lookup how that type of storage and controller was implemented in Jellyfish but couldn't trasfer it to my project due to it's ETS logic. I want to understand, does the Jellyfish LL HLS work for iPhones? Is there some example of module of Membrane.HTTPAdaptiveStream.Manifest behaviour that can produce Apple type manifest? Maybe I am wrong and the reason iPhones doesn't play my LLHLS stream is not in the m3u8 file?
Q
Qizot35d ago
I have vast experience with LL-HLS for iphones and I have to say that working around them is a pain in the ass...
Q
Qizot35d ago
Overall, the hls.js is very forgiving and will take almost anything you throw at it. On the other hand Apple's implementation is strongly relying on the specification, it only takes a single MUST mismatch from a spec and the stream becomes unplayable. You can look at this set of apple's tools: https://developer.apple.com/documentation/http-live-streaming/using-apple-s-http-live-streaming-hls-tools And look for mediastreamvalidator. It will throw tons of errors at you and it has the right to do so. To give you an example: WebRTC doesn't force you to produce keyframes at regular intervals (where for other methods of streaming you are able to set constant 2 second intervals), if you for instance fail to match expected segment duration (within a small error margin) the iPhones player refuses to play it.
Apple Developer Documentation
Using Apple’s HTTP Live Streaming (HLS) Tools | Apple Developer Doc...
Segment your video stream and create media playlists for successful transmission with Apple’s provided tools.
Q
Qizot35d ago
Also another note, Safari won't tell you anything why exactly the stream is not playable, no descriptive error. The best pick is to use a native iPhone app integrating their AVPlayer and try to capture the errors it produces and printing them out.
K
kurmetaubanov35d ago
@Qizot thank you for suggestions and tips and for confirming me that it is a specification thing that doesn't match Yes I have been using iPhone iOS emulator with Safari Developer tool to debug network API calls and found out it will not tell me the errors but will act itself way different than hls.js i will have to look at mediastreamvalidator of Apple HLS tools... I was hoping someone solved this before...) and has correctly working Membrane.HTTPAdaptiveStream.Manifest implementation)
Want results from more Discord servers?
Add your server
More Posts
Pipeline children started twiceHello, I'm seeing children in a Membrane pipeline get started twice: I think this might be an issuWriting a `Bin` queuing content from multiple remote files@skillet wrote in https://discord.com/channels/464786597288738816/1007192081107791902/12244914186265Split audio file into 20mb chunksIm trying to figure out how to take the file at this URL, and send it to OpenAI in chunks of 20mb: hbundlex nifs and libasanIs it anyone build nifs with libasan support? Even if I put compiler_flags ["-fno-omit-frame-pointerunifex seg fault on handle_destroy_stateHi, i'm implementing g772.1 decoder/encoder plugin and have issue with handle_destroy state. I've taDeveloping an advanced Jellyfish use caseHey I've been using jellyfish to develop a platform for essentially one-on-one calls between two peotoilet capacity of outbound_rtx_controllerHi, I'm getting the following error on SessionBin: ``` [error] <0.1282.0>/:sip_rtp/{:outbound_rtx_cOn JF Tracks and Reconnecting (in React)So I noticed a few things about the react-sdk and JF tracks in general. Note I have react code that h264 encoder problemshi guys, I'm using h264 encoder plugin for video encoding and sending it via rtp to client. SometimPipeline for muxing 2 msr files (audio and video) into a single flv fileI have the following pipeline which takes 2 msr files (recorded to disk using the RecordingEntrypoinMP3 output is audible, but test not passHi everyone. I made small changes in `membrane_mp3_lame_plugin` to support other input config (the oGrab keyframe image data from h264 stream?We are looking at some h264 coming from an RTSP stream. Membrane is doing a fine job with the HLS deUnity client?Thanks a lot to the Membrane team. The number of examples and availability of code has been incredibWebRTC stream not workingI've hit an issue trying to get an MPEGTS stream displaying in the browser via WebRTC. All seems toError when compiling free4chatThis is probably pretty basic but I'm at square one. I get an error when I'm compiling free4chat, a Screen ShareIs there any reason why jellyfish_videoroom when is running localy share screen is not working ? I sTesting Membrane ElementI'm trying to setup a simple test of a membrane element, but I'm stumped a bit on how to assert thatClustering and scale out behaviourContext: I've a membrane application running in an elixir cluster of 1. It receives a RTSP stream (U