8 ms·
Scalable Live Video Streaming Using NGINX and MPEG-DASH/HLS
- mountaineer22 10y agoHow does this compare to Wowza?
- deleted 10y ago[deleted]
- benwilber0 10y agobasically the same. I find nginx + ffmpeg to be easier and simpler than deploying Wowza. As well as free-er.
- bcryptd 10y agoIt's not running on Java so it should be faster with the same hardware.
- jacquesm 10y agoThere may be a lot to complain about with Java but it is insanely efficient when it comes to serving data out a network port. Wowza will scale well beyond most companies' needs, I've used their stuff for years and it is the one program that convinced me that Java actually can be very efficient for applications like these.
- aleksanb 10y agoThe setup seems rather similar to https://github.com/arut/nginx-rtmp-module https://github.com/arut/nginx-rtmp-module which I've used in the past. Perhaps they've bundled it with Nginx Plus without crediting the original authors? The project has a bit too permissive license for my taste.
- rch 10y ago> Both NGINX and NGINX Plus support the features we’re discussing
- benwilber0 10y agoRoman Arutyunyan is (or was previously) an engineer at nginx when he developed nginx-rtmp. https://www.youtube.com/watch?v=1boJWioxsWc https://www.youtube.com/watch?v=1boJWioxsWc
- gshulegaard 10y agoI work at Nginx, although not on the core development team, and to the best of my knowledge Roman Arutyunyan is still an engineer with us.
- schellkenig 10y agoBut the nginx-rtmp-module does not support DASH with ABR to the best of my knowledge. Seems to be still an open issue https://github.com/arut/nginx-rtmp-module/issues/480 https://github.com/arut/nginx-rtmp-module/issues/480
- alexcroox 10y agoI wish there was a decent HTML5 low latency (< 2s) solution. Nothing comes close to RTMP + Flash still.
- benwilber0 10y agoHD RTMP to the client is extremely difficult to scale without an enormous investment in infrastructure. AFAIK BAM/MLB.TV are the only ones doing it.
- dmm 10y agoThe scalability of DASH/HLS comes from the fact that the video segments are just static files sitting on a http server so they can be cached and distributed with the many techniques for serving static files over http. If you don't need the scalability of DASH/HLS you can use the WebRTC apis for low latency streaming, usually <1s. WebRTC can be used for client-server applications just as easily as peer-to-peer using a gateway like Janus[1]. [1] https://janus.conf.meetecho.com/ https://janus.conf.meetecho.com/
- bcryptd 10y agoIt can be done http://www.gpac-licensing.com/2014/07/09/lowering-dash-live-latency-240ms/ http://www.gpac-licensing.com/2014/07/09/lowering-dash-live-...
- excalibur 10y agoI thought this project was shut down. http://www.coderag.com/hooli-lays-off-hundreds-of-employees-dissolves-entire-nucleus-division/ http://www.coderag.com/hooli-lays-off-hundreds-of-employees-...
- callmeed 10y agoThis looks cool. I'm very interested in live video but can someone enlighten me on the creation side of this equation? How do I create an RTMP stream in the first place? What camera can/should I use? Can I use webcam? Is there an iOS app that can do it? What hardware/software is needed to create this RTMP stream that I'll be pushing to nginx?
- dylz 10y agoffmpeg, vlc, OBS Studio (this one is probably easiest; you can just add an image or add a webcam source etc then configure a rtmp url to push to)
- ericcholis 10y agoWirecast from Telestream is a good paid option as well.
- jacquesm 10y agoWowza is another one. It scales very well.
- benwilber0 10y agoStreamers typically use something like [1] OBS, or [2] FMLE to stream their desktop or webcam to an RTMP ingest server like Twitch, Youtube, Streamup, Streamboat.tv, etc. Can even just use ffmpeg. [1] https://obsproject.com/ https://obsproject.com/ [2] http://www.adobe.com/products/flash-media-encoder.html http://www.adobe.com/products/flash-media-encoder.html
- NEDM64 10y agoIs there a way to mux subtitles written on the fly? For example, I want to mux a subtitle stream, with the real time clock in it, into a video stream.
- kalimoxto 10y agoffmpeg can do that fairly easily. To adjust the command in the example, you need to to take the srt file and pass it as a second -i input file. There's some helpful guides on how to do that if you search around. e.g. https://en.wikibooks.org/wiki/FFMPEG_An_Intermediate_Guide/subtitle_options https://en.wikibooks.org/wiki/FFMPEG_An_Intermediate_Guide/s...
- bcryptd 10y agoThe one thing I've always wanted from nginx-rtmp was the ability to pull from a source input instead of running a separate process with ffmpeg to push the stream over. If they could get that working my life would become less complicated quickly.
- jc4p 10y agoyeah I use nginx-rtmp for local video capturing (basically the functionality of a mirror) and the lag that needing to re-encode + chunk + starting off at the beginning of the chunks in the playlist introduces is meh. I think I'm going to transition my project over to WebRTC though, since the mobile device I'm using to display the video can handle that now.
- nickysielicki 10y ago> [I'd prefer] the ability to pull from a source input instead of running a separate process with ffmpeg to push the stream over. Could you elaborate on this? I don't understand what you mean by 'push' and 'pull' in this context.
- bcryptd 10y agoCurrently to get the stream from ffmpeg into nginx you have to do the following: ffmpeg -re -i input_file -c copy -f flv rtmp://nginx_server_url:1935/app It would be nice to have the ability to set up an app block that looked kind of like this application source1 { exec fffmpeg -f decklink -i 'DeckLink Quad (1)@8' -f flv rtmp://localhost/app/$name } ffmpeg is still pushing the stream to nginx, but nginx is in charge of starting that process.
- jordanbaucke 10y agoAnyone have any insight on RTMP + HLS / MPEG-DASH -> WebRTC? Ala www.beam.pro (what they call FTL)?
- vhiremath4 10y ago"but for ease of reading we refer to NGINX Plus throughout" Uhuh. Suuuure. :p
- bcryptd 10y agoI also would hesitate to call it "Live" without showing how to adjust for GOP sizes, key frames, B and I frames, etc.
- smashthesystems 10y agoUsing Representations[1] in MPEG-DASH is a more native way within the manifest to scale the quality / bandwidth requirements. There is some preliminary work and an issue open on one of the module forks which seems to get a little more tlc (imho) - https://github.com/sergey-dryabzhinsky/nginx-rtmp-module/issues/55 https://github.com/sergey-dryabzhinsky/nginx-rtmp-module/iss... [1] https://www.brendanlong.com/the-structure-of-an-mpeg-dash-mpd.html https://www.brendanlong.com/the-structure-of-an-mpeg-dash-mp...
- nickysielicki 10y agoLots of people in here commenting about nginx plus, but can anyone recommend a free alternative to BITMOVIN?
- hayksaakian 10y agovideo.js with the HLS plugin is fine if you don't need dash (there may be flash) but obviously that's very bare bones. It seems like there's things like ad support among other features you get with the suggested player.
- corobo 10y agoI had the same wonder and through some digging found videojs-contrib-dash[1] which uses dash.js, referenced on the bitmovin site[2]. I'm going to give this a go and see what does and doesn't work. [1] https://github.com/videojs/videojs-contrib-dash https://github.com/videojs/videojs-contrib-dash [2] https://bitmovin.com/mpeg-dash-open-source-player-tools/ https://bitmovin.com/mpeg-dash-open-source-player-tools/
- newman314 10y agoFYI. The rtmp module broke recently with the recent nginx 1.11.0 release.
- deleted 10y ago[deleted]
- deleted 10y ago[deleted]
- kasparsklavins 10y agoWorking on a similar product but using peer to peer live video streaming. Since the data does not touch the server, there are no scaling problems.
- jacquesm 10y agoOne-to-many or one-to-one?
- kasparsklavins 10y agoone to many
- slederer 10y agoThere are a couple of cool P2P companies out there like http://www.streamroot.io/ http://www.streamroot.io/ or https://www.peer5.com/ https://www.peer5.com/
- deleted 10y ago[deleted]
- corobo 10y agoWho's the target market? I think I'm a bit jaded as my first thought was this would open up the streamer to get DDoSed every time they try to stream