DASH requirements

Recommendations and requirements for live stream encoders compatible with DASH industry forum specifications.

🚧

DASH streams pushed from unqualified live encoders will be rejected.

This table describes mandatory fields from the DASH specification.

MPD informationNotes
@typeSet to dynamic.
@publishTimeSpecifies the wall-clock time when the MPD was generated and published at the origin server.
@availabilityStartTimeThe start time is the anchor for the MPD in wall-clock time.
@minimumUpdatePeriodSet this to 0 to indicate that frequent DASH events may occur.

You can find more details in the DASH Guidelines.

📘

Do not use base URLs with a single source manifest. When you add a base URL to a single source manifest, it changes all addressing from relative to absolute and binds the input to the output. Use base URLs if you’re using a backup stream.

Media Services Live DASH does not honor live encoder HTTP DELETE requests. While Media Services servers will return a 200 HTTP status code, the content is not actually deleted as requested.

Mime types

ExtensionMime type
.mp4video/mp4
.m4vvideo
.m4svideo/iso.segment
.m4aaudio/mp4

Alternate hostname uploads

Encoders should be capable of using multiple hostnames when publishing multiple bitrates to better handle failure situations. Encoders that cannot use multiple hostnames will have a single point of failure. If the single upload host being used is lost, the event will be interrupted until the host returns or a new host is provisioned.

Primary and backup DASH stream URLs

To avoid interruptions in stream delivery, encoders should input primary and backup publishing and playback hostnames and primary and backup paths for a given stream.

Set up your encoder to publish the same content simultaneously to primary and backup URLs, including:

  • .mpd files
  • initialization segments
  • media segments

Refer to Publish DASH streams for syntax.

The playback information is embedded in the manifest .mpd file as two BaseURLs, as shown in this example:

If the player detects a 404 error on a segment request, it switches to an alternate stream.

Posting URLs

Encoders must be capable of posting URLs in the formats described.

mpd

DASH encoders can upload the .mpd file once, as per the standard, or at an arbitrary interval. An update interval of about 30 seconds is ideal. The content of the file may change on each upload, but that is optional.

The URL format is: https://{hostname}/{format}/{streamID}/{eventname}/{anyname}.mpd

For example: https://p-ep500002.i.akamaientrypoint.net/dash/500002/test79/dash.mpd

Initialization segment

The initialization segment must be uploaded only once for each bitrate/representation.

The URL format is: https://{hostname}/{format}/{streamID}/{eventname}/{representationID.ext with init string}.{any extension other than mpd}

If you need to restart your encoder, make sure that the initialization segment name gets re-uploaded with a unique value in its name (for example, timestamp).

📘

Make sure that the initialization header has the init keyword in it. The file with .init extension is also acceptable.

Examples:
https://p-ep500002.i.akamaientrypoint.net/dash/500002/test79/5000kbps.init
https://p-ep500002.i.akamaientrypoint.net/dash/500002/test79/500kbps-init-test79.header
https://p-ep500002.i.akamaientrypoint.net/dash/500002/test79/5000kbps-initialization.mp4

Media Data Segment

Configure your encoder to upload the media data segment .mp4, .m4s, .m4a, or .m4v once, or at any interval that you choose.

The URL syntax is: https://{hostname}/{format}/{streamID}/{eventname}/{representationID}-{segment number}.{mp4,m4s,m4a,m4v}

For example:
https://p-ep500002.i.akamaientrypoint.net/dash/500002/test79/500kbps-100.mp4

Upload order

Upload the files and segments for MPEG DASH in this order:

  1. .mpd file. Upload the .mpd once or at an arbitrary interval.
  2. Initialization segment. Upload only once for each bitrate or representation.
  3. Media segment. Upload every n seconds, where n = segment duration.

👍

Tip

If there is a reconnect, you should resend the .mpd and initialization file.

DASH qualification checklist

Akamai uses the test cases described in this table to qualify DASH ingest.

TestDescription
Basic streams testCheck that the .mpd file is downloadable.
Verify that the MPD@type attribute is present and its value is dynamic.
DASH spec conformanceVerify that the @publishTime and @availabilityStartTime attributes are present. According to the spec, for @type=dynamic, these attributes must be present. Check if the @minimumUpdatePeriod attribute is present.
Error recovery test.Verify if the streams reconnect successfully to the same entry point.
Error recovery test (failover to a different entrypoint).Verify if the transition to the secondary entry point is seamless.
GOP size and key-frame intervalGOP size and key-frame interval across representations/bitrates must be same.
HTTP request typeVerify that the HTTP Request Type for the segments is either PUT or POST.
Long duration publishVerify playback and analyze the stream publish after 48 hours of publish.
MPD@availabilityStartTime is constantVerify that the value of the attribute MPD@availabilityStartTime does not change during the course of publish.
MPD file update intervalCheck that the MPD file is not uploaded too frequently and too less frequently. An update interval of about 30 seconds is optimal. For details, refer to Posting URLs.
PlaybackVerify playback on DASH players. For details, refer to Primary and backup DASH stream URLs
Segment namesVerify that the segment names in the URL are according to the ones advertised in the MPD file.
Verify the initialization attribute or segment has the keyword init.

Verify that the other values are per the Spec. For example:
• The initialization attribute shouldn't have the $Number$ identifier.
• The initialization attribute shouldn't have the $Time$ identifier.
• The Representation tag should have the id attribute.
• The Representation@id attribute shouldn't have both $Number$ and $Time$ simultaneously.
• The Representation tag should have the bandwidth attribute.
• The SegmentTimeline element should have S tags, and the S tag should have at least the d attribute.
• The SegmentTemplate tag should have the initialization attribute.
Segment numberingCheck that the segment numbering is not close to (2 ^32)-1.
Segment retry and retry interval on 5xx responseTrigger a 5xx response to the encoder by modifying the delivery-hostname for the stream-id.

Trigger a 5xx response by modifying the forward target host, and verify encoder behavior.
Segment upload intervalVerify that the segment upload interval is almost equal to the advertised values.
Stream alignmentCheck that the timestamps across representations and bitrates are aligned.
User-Agent stringVerify that the Encoder is sending a valid User-Agent string.

Encoders must include a User-Agent header which provides information about brand name, version number, and build number in all posts.