This document defines Guidelines and Best Practices for large scale streaming based on Unified Origin.
Both live and on-demand streaming are covered.
Advanced technologies such as object-based cloud storage, live ingest, ad insertion, trick modes, seek preview, content protection, sub-titling and others are considered.
The guidelines are based on practical knowledge accumulated in the last two decades. Also, the guidelines are well aligned to other best industry practices.
By following these guidelines, one is able to implement effective content preparation, storage, scalable delivery, frame-accurate capture, effective archiving, low latency delivery, and other performance improvements.
- Content Preparation
- Req.: source content is stored as (f)MP4 (preferably CMAF)
- Req.: a suitable bitrate ladder (content dependent)
- Req.: alignment of Groups of Pictures (GOPs) across bitrates
- Req.: each video segment starts with an IDR frame
- Req.: track metadata is signaled in "moov" box / .init segment
- Rec.: start time and duration are equal for all tracks (audio, video, text)
- Rec.: all fragments have an equal duration
- Rec.: fragment boundaries are aligned across all tracks (audio, video, text)
- Rec.: in case of B-frames, use negative composition time offsets (and no edit lists)
- Rec.: timescale of audio tracks matches their sample rate (48 KHz preferably)
- Rec.: avoid transcoding of subtitles when using advanced styling
- Rec.: codec parameters are carried out-of-band, instead of in-band
- Rec.: all tracks are compliant with a CMAF media profile
- Req.: additional IDR frames are present at splice points (SCTE 35 use cases only)
- Req.: subtitle cues follow a sequential timeline aligned with other tracks
- Rec.: timed metadata is carried in a separate sparse track
- Rec.: Add captions or subtitles
- Rec.: Add an audio description track (for the visually impaired)
- Unified Origin - General Recommendations
- Rec.: Specify a --hls.minimum_fragment_length (affects HLS only)
- Rec.: Use --variant_set to list ~2Mbit variant first (affects HLS only)
- Rec.: Set --hls.client_manifest_version to '4' (affects HLS TS only)
- Rec.: Enable --hls.no_multiplex (affects HLS TS only)
- Rec.: Set --mpd.segment_template to 'time' (affects DASH only)
- Rec.: Enable --mpd.inline_drm when using DRM (affects DASH only)
- Rec.: Do not set --mpd.minimum_fragment_length (affects DASH only)
- Rec.: Set --iss.client_manifest_version to '22' (affects Smooth only)
- Rec.: Specify a --fixed_gop
- Req.: Deliver over HTTPS (especially when streaming DRM protected content)
- Rec.: Enable gzip compression on HLS playlists
- Req.: Use a Content Delivery Network (CDN)
- Rec.: Validate HLS streams with MediaStreamValidator
- Unified Origin - Recommendations for VOD