Guides and Sample Code


HLS Authoring Specification for Apple Devices

On This Page

About HLS Authoring

This document describes the requirements for live and VOD audio-video content delivery using HTTP Live Streaming (HLS) to Apple devices.

For a deeper discussion of the features available in HLS, please refer to Apple’s streaming resource page at, which contains pointers to the overview document, the HLS specification, technical notes, FAQs, presentations, and examples.

The HLS specification is a published RFC [RFC8216]. However, HLS continues to evolve, so there is an updated draft specification - draft-pantos-hls-rfc8216bis [HLS2]. This document always uses the most recent version of the draft standard.

The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", “SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in RFC 2119.

Testing Your Streams

Apple provides several command-line tools for HTTP Live Streaming. These can be obtained from (Once on that page, do a search for “http live streaming tools”.)

To assist in validating your streams use the command-line tools mediastreamvalidator and While these tools are unable to check everything about your streams, the checks they do are fairly comprehensive and we continue to improve the tools.

You should check the video quality of your streams by visual inspection. The mediastreamvalidator tool does not check video quality.

You should check playback of your streams under a variety of network conditions.

Using hlsreport

The script is used to generate an HTML summary report from a JSON file that was generated by mediastreamvalidator. The report includes several tables with details about variants, renditions, and I-frame variants. Each table entry has a unique ‘stream ID’ number. A list of issues is included, divided into 'Must Fix' and 'Should Fix' categories according to this specification. The issues cross-reference individual variants and renditions using the unique stream IDs.

The simplest way to call it is:

  1. validation_data.json

where validation_data.json is the JSON file produced by mediastreamvalidator. This will produce a file called validation_data.html that is the report. You can change the name of the report file with the -o option:

  1. -o my_report.html validation_data.json

For further information, see the hlsreport(1) man page.