Skip to content
This repository has been archived by the owner on Jan 3, 2023. It is now read-only.

dholroyd/lowly

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

lowly

Low-latency live streaming proof-of-concept. Attempts to implement the server portion of Apple's low-latency extensions to HLS.

Deployment overview

Input:

  • Transport Stream
  • over RTP
  • on UDP port 5000

Output:

  • HTTP1.1 (add HTTP2 support with a proxy like Nginx)
  • on TCP port 5050
  • Master manifest published at /master.m3u8
[encoder]  --MPEGTS/RTP-->  [lowly]  --HLS/HTTP1.1-->  [nginx]  --HLS/HTTP2-->  [player]

⛔ Limitations

  • Hardcoded rewind window (1 hour)
  • In-memory only! Media is not written to persistent storage.
  • Audio must be AAC 48khz
  • Video must be AVC 25fps, with an IDR every 48 frames
  • Haven't been able to test the low latency aspect on an actual player! (Standard latency stream has had basic tests on Safari / iOS.)
  • prompeg FEC support on input planned but not available yet

Feature support

Low latency extensions,

  • Partial segments (EXT-X-PART)
  • Blocking media-manifest reloads (_HLS_msn / _HLS_part support)
  • HTTP2 push of parts (if using an HTTP2 reverse proxy supporting Link: .. rel=preload header, like Nginx)
  • Playlist Delta Updates (EXT-X-SKIP / _HLS_skip=YES not yet supported)
  • Rendition reports (EXT-X-RENDITION-REPORT / _HLS_report not yet supported)

General HLS features,

  • No ABR! (can only ingest a single audio stream and a single video stream right now)
  • Codecs
    • AVC
    • AAC
    • no others supported (no HEVC etc)
  • fMP4 segments
  • TS segments unsupported
  • BANDWIDTH signalling (supported via maximum_bitrate_descriptor in input)
  • No FRAMERATE (planned via inspection of HEVC headers)
  • No captions / subtitles
  • No SCTE signalling
  • No language code signalling (planned via language_descriptor metadata in input)
  • No EXT-X-DISCONTINUITY signalling (if the input has a discontinuity, the output will be invalid HLS)
  • EXT-X-PROGRAM-DATE-TIME (if AVC pic_timing metadata is in the source stream)
  • No EXT-X-I-FRAME-STREAM-INF / EXT-X-I-FRAMES-ONLY
  • No DRM
  • No EXT-X-ENDLIST (there's currently no way to end the stream)
  • EXT-X-MEDIA-SEQUENCE (after stream duration reaches hardcoded limit and old segments start being removed)
  • doubtless lots of other mandatory spec features that are not implemented right now!

See also

https://en.wikipedia.org/wiki/Lowly_Worm

About

Low-latency live streaming PoC

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages