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 information | Notes |
---|---|
@type | Set to dynamic . |
@publishTime | Specifies the wall-clock time when the MPD was generated and published at the origin server. |
@availabilityStartTime | The start time is the anchor for the MPD in wall-clock time. |
@minimumUpdatePeriod | Set 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
Extension | Mime type |
---|---|
.mp4 | video/mp4 |
.m4v | video |
.m4s | video/iso.segment |
.m4a | audio/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:
.mpd
file. Upload the.mpd
once or at an arbitrary interval.- Initialization segment. Upload only once for each bitrate or representation.
- Media segment. Upload every
n
seconds, wheren
= 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.
Test | Description |
---|---|
Basic streams test | Check that the .mpd file is downloadable.Verify that the MPD@type attribute is present and its value is dynamic . |
DASH spec conformance | Verify 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 interval | GOP size and key-frame interval across representations/bitrates must be same. |
HTTP request type | Verify that the HTTP Request Type for the segments is either PUT or POST . |
Long duration publish | Verify playback and analyze the stream publish after 48 hours of publish. |
MPD@availabilityStartTime is constant | Verify that the value of the attribute MPD@availabilityStartTime does not change during the course of publish. |
MPD file update interval | Check 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. |
Playback | Verify playback on DASH players. For details, refer to Primary and backup DASH stream URLs |
Segment names | Verify 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 numbering | Check that the segment numbering is not close to (2 ^32)-1. |
Segment retry and retry interval on 5xx response | Trigger 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 interval | Verify that the segment upload interval is almost equal to the advertised values. |
Stream alignment | Check that the timestamps across representations and bitrates are aligned. |
User-Agent string | Verify 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. |
Updated almost 3 years ago