How to stream over MPEG-DASH

Wowza Streaming Engine™ media server software includes support for Dynamic Adaptive Streaming over HTTP (DASH) as specified by the MPEG-DASH standard ISO/IEC 23009-1. MPEG-DASH is supported for both on-demand (VOD) and live streaming and is generally very similar to proprietary adaptive streaming technologies such as Apple HLS, Adobe HDS, and Microsoft Smooth Streaming.

Note: DASH streaming is NOT supported in Wowza Media Server™ software.

Contents


Configuring MPEG-DASH streaming applications in Wowza Streaming Engine Playing MPEG-DASH streams More resources
Appendix: Media Presentation Description (MPD) manifests for content delivery

Configuring MPEG-DASH streaming applications in Wowza Streaming Engine


MPEG-DASH configuration in Wowza Streaming Engine is relatively straightforward because most of the configuration required to do MPEG-DASH streaming is already enabled in the default media server software installation. This section describes where the preconfigured DASH settings are in Wowza Streaming Engine Manager and the specific changes you must make to fully enable MPEG-DASH support in the server.

Before you can use Wowza Streaming Engine Manager, you must start the Wowza Streaming Engine software and the Manager. See How to start and stop Wowza Streaming Engine software.

After starting the Wowza media server software and manager application, you can open Wowza Streaming Engine Manager in a web browser and sign in. You can use Streaming Engine Manager with the latest versions of most web browsers that support HTML5 and Cascading Style Sheets level 3 (CSS 3). We recommend the Google Chrome browser.

Use the following URL to open the manager:

http://[wowza-ip-address]:8088/enginemanager

Where [wowza-ip-address] is the Wowza media server IP address or hostname.

Configure applications to deliver on-demand MPEG-DASH streams

This section shows you how to set up a video on demand (VOD) streaming application in Wowza Streaming Engine Manager. The example uses the default vod application that's included in the Wowza Streaming Engine software installation.

Note: In the following procedure, an alert appears after every configuration change.

You can wait until all changes are completed before you restart the application.

  1. In Wowza Streaming Engine manager, click the Applications tab at the top of the page and then click vod in the contents panel. In the vod application details page, note that the MPEG-DASH playback type is enabled by default.


    Click the MPEG-DASH playback type option to enable it if it's not enabled.
  2. In the contents panel, click Playback Security for the vod application.

  3. On the Playback Security page, click Edit. Then under Client Restrictions, select No client restrictions (the default value).


     

    Note: For more information about configuring the options to secure playback connections to VOD applications, see Playback Security.

  4. Configure optional properties. For more information, see Optional configuration items.
  5. Restart the application.
  6. Copy your encoded video files to your VOD application's content directory. If you didn't change any of the application's default values, upload the files to the content folder in the Wowza Streaming Engine installation ([install-dir]/content). If you changed the application's Content Directory setting to an application-specific directory (${com.wowza.wms.context.VHostConfigHome}/content/[application-name]) or to a fully customized location on the media server, upload the files to these alternate locations.
     

    Note: For on-demand MPEG-DASH streaming to work, your video files must be encoded using the following codecs:

    Video
    • H.264
    Audio
    • AAC, AAC Low Complexity (AAC LC), AAC High Efficiency (HE-AAC) v1 and v2
    • Dolby Digital 5.1 Surround Sound (AC-3) and Dolby Digital Plus (Enhanced AC-3 or E-AC-3)

Configure applications to deliver live MPEG-DASH streams

This section shows you how to set up a live streaming application in Wowza Streaming Engine Manager. The example uses the default live application that's included in the Wowza Streaming Engine software installation.

Note: In the following procedure, an alert appears after every configuration change.

You can wait until all changes are completed before you restart the application.

  1. In Wowza Streaming Engine manager, click the Applications tab at the top of the page and then click live in the contents panel. In the live application details page, note that the MPEG-DASH playback type is enabled by default.



    Click the MPEG-DASH playback type option to enable it if it's not enabled.
  2. In the contents panel, click Playback Security for the live application.

  3. On the Playback Security page, click Edit. Then under Client Restrictions, select No client restrictions (the default value).


     

    Note: For more information about configuring the options to secure playback connections to live applications, see Playback Security.

  4. Configure optional properties. For more information, see Optional configuration items.
  5. Restart the application.
  6. Connect live video from a camera or encoder to your live application by following the instructions in How to connect a live source to Wowza Streaming Engine.
     

    Note: For live MPEG-DASH streaming to work, your live stream must be encoded using the following codecs:

    Video
    • H.264
    Audio
    • AAC, AAC Low Complexity (AAC LC), AAC High Efficiency (HE-AAC) v1 and v2
    • Dolby Digital 5.1 Surround Sound (AC-3) and Dolby Digital Plus (Enhanced AC-3 or E-AC-3)

Configure additional MPEG-DASH streaming functionality through properties

This section shows you how to add properties in Wowza Streaming Engine Manager for additional MPEG-DASH functionality.

To add one or more of these optional properties, do the following:

  1. In Wowza Streaming Engine Manager, click the Applications tab and then click either vod or live in the contents panel.
  2. On the details page Properties tab, click Custom in the Quick Links bar.
     

    Note: Access to the Properties tab is limited to administrators with advanced permissions. For more information, see Manage credentials.

  3. In the Custom area, click Edit.
  4. Click Add Custom Property, specify the settings for one of the following properties in the Add Custom Property dialog box, and then click Add:

    Property Path = /Root/Application/HTTPStreamer

    Name
    Type
    Description
    mpegdashHttpRedirectEnabled Boolean Enables MPEG-DASH MPD redirects if set to true. MPD HTTP redirects aren't enabled by default.
    mpegdashHttpRedirectDefaultStatusCode Integer Specify the default redirect status code used in MPEG-DASH MPD HTTP redirect responses. The default value is 307 (Temporary Redirect).
    mpegdashHttpRedirectDisableStatusCode302Override Boolean HTTP requests for a DASH MPD that indicate "HTTP 1.0" protocol will normally respond with a 302 redirect status code instead of the default (or configured) redirect status code. When set to true, this property allows you to disable that override so that the normal default (or configured) status code is used. The default value is false.
    mpegdashAdjustCTTSForFirstKeyFrameToZero Boolean (Wowza Streaming Engine 4.5.0 and later) Adjusts CompositionTimeToSample (CTTS) for all encoded frames in an on-demand file to enable playback in MPEG-DASH players when set to true. If this property isn't set or it's set but its value is set to false, and the first frame of the video has a CTTS value, Wowza Streaming Engine logs the following message in [install-dir]/logs/wowzastreamingengine_access.log file:
    MediaReaderH264MPEGDash.indexFile[vod/definst/earnings_release_1q16.mp4]: First frame of video has a non-zero CTTS value [200], playback may not work on all browsers, try setting HTTPStreamer/Properties boolean property mpegdashAdjustCTTSForFirstKeyFrameToZero to true
    mpegdashEnableUTCTimingElements Boolean (Wowza Streaming Engine 4.7.0 and later) Excludes UTCTiming elements in live MPEG-DASH manifests when set to false. The default value is true, which includes UTCTiming elements in the manifests.
    mpegdashUTCTimingSchemeOrder String (Wowza Streaming Engine 4.7.0 and later) A prioritized, comma-separated list for ordering and enabling UTCTiming schemes. The first in the list is given the highest priority. The default value, direct, should work in most cases. Other valid values are http-head, http-xsdate, http-iso, http-ntp, ntp, and sntp.
    Note: If you specify a value other than direct or http-head, you must configure the corresponding mpegdashUTCTiming[scheme] property. For example, if you specify http-xsdate,  you must configure the mpegdashUTCTimingHttpXsDateList property.
    mpegdashUTCTimingHttpHeadList String (Wowza Streaming Engine 4.7.0 and later) A prioritized, comma-separated list of the HTTP URLs to which HTTP HEAD requests can be made to obtain the Date information in the HTTP Headers. The first in the list is given the highest priority. The default value is a URL pointing to the local Wowza Streaming Engine server (${com.wowza.wms.context.ApplicationInstance.MPEGDash.domain}/dashtime.txt), but any valid HTTP server URL can be specified. Both HTTP and HTTPS URLs are supported.
    mpegdashUTCTimingHttpXsDateList String (Wowza Streaming Engine 4.7.0 and later) A prioritized, comma-separated list of the HTTP URLs to which requests can be made to obtain the appropriate time. The time is returned in the xs:dateTime format. Any valid HTTP server URL can be specified. For example, http://myPublicServer.com/xsdate, https://mySecureServer.com/xsdate. Both HTTP and HTTPS URLs are supported. The default value is null.
    mpegdashUTCTimingHttpISOList String (Wowza Streaming Engine 4.7.0 and later) A prioritized, comma-separated list of the HTTP URLs to which requests can be made to obtain the appropriate time. The time is returned in the ISO time code format. Any valid HTTP server URL can be specified. For example, http://myPublicServer.com/xsdate, https://mySecureServer.com/xsdate. Both HTTP and HTTPS URLs are supported. The default value is null.
    mpegdashUTCTimingHttpNTPList String (Wowza Streaming Engine 4.7.0 and later) A prioritized, comma-separated list of the HTTP URLs to which requests can be made to obtain the appropriate time. The time is returned in the NTP timestamp format. Any valid HTTP server URL can be specified. For example, http://myPublicServer.com/ntptime, https://mySecureServer.com/ntptime. The default value is null.
    mpegdashUTCTimingNTPList String (Wowza Streaming Engine 4.7.0 and later) A prioritized, comma-separated list of the servers that can be used with with the NTP protocol (as defined in IETF RFC 5905) to obtain the appropriate time. Any valid NTP server name or IP address can be specified. For example, time-a.nist.gov,time-b.nist.gov,129.6.15.29. The default value is null.
    mpegdashUTCTimingSNTPList String (Wowza Streaming Engine 4.7.0 and later) A prioritized, comma-separated list of the servers that can be used with with the SNTP protocol (as defined in IETF RFC 5905) to obtain the appropriate time. Any valid SNTP server name or IP address can be specified. For example, time-a.nist.gov,time-b.nist.gov,129.6.15.29. The default value is null.
     
    Property Path = /Root/Application
    Name
    Type
    Description
    mpegdashMinBufferTime Integer (Wowza Streaming Engine 4.5.0 and later) Modifies the minBufferTime attribute in MPEG-DASH MPDs. The default value is 6000 (for live streams) or 1500 (for on-demand streams).
    mpegdashAddMPDSegmentBaseURL Boolean (Wowza Streaming Engine 4.6.0 and later) Controls whether the <BaseURL> tag is included in MPDs. The default value is false. Set the value to true to enable insertion of <BaseURL>.
  5. Click Save and then restart the application to apply the changes.

Playing MPEG-DASH streams


Many MPEG-DASH players are being developed for various platforms. The following is a list of players that Wowza has actively integrated with and find to be generally compatible with the MPEG-DASH implementation in Wowza Streaming Engine:

Use example players in Wowza Streaming Engine to play MPEG-DASH streams

Wowza Streaming Engine includes the following example players, which are based on the Shaka Player library:

  • [install-dir]/examples/VideoOnDemandStreaming/MPEGDASHPlayer/player.html. To play MPEG-DASH single and adaptive bitrate VOD MP4 streams.
  • [install-dir]/examples/LiveVideoStreaming/MPEGDASHPlayer/player.html. To play MPEG-DASH single and adaptive bitrate live MP4 streams.

For details, see How to play video with the example MPEG-DASH players (DASH).

Use third-party players to play MPEG-DASH streams

Synchronizing system time differences for playback

Wowza Streaming Engine and DASH clients must be time-synchronized for correct functionality (see "Annex A.3.1" in the MPEG-DASH standard ISO/IEC 23009-1). Live DASH streaming may pause or stop if the server and client system times are different by more than a minute.

To help address this issue, the Date HTTP header is provided in the responses to all MPEG DASH mpd and segment requests. This can be used by players to make any synchronization adjustments in the client. In environments where synchronization can't be achieved, player(s) should support an algorithm for "searching" (via repeated segment requests) for the latest (live) segment available on the server. Specification of this algorithm is implementation-dependent and beyond the scope of Wowza support.

More resources


How to secure MPEG-DASH streaming using Common Encryption (CENC)

How to debug MPEG-DASH streaming in Wowza Streaming Engine

How to transcode live streams to WebM for MPEG-DASH playback


Appendix: Media Presentation Description (MPD) manifests for content delivery


An MPEG-DASH server provides client players with a list of the available media chunk URLs in a Media Presentation Description (MPD) manifest file. Clients can then sequentially request the media chunks as required to provide uninterrupted playback of the media presentation.

Delivery formats

To provide a transition path from other HTTP streaming technologies, MPEG-DASH supports a variety of different MPD and media formats. This provides a combination of ways to identify chunk URLs, while also allowing different media container and content encoding formats. All variations and combinations allow adaptive bitrate switching as MPEG-DASH is designed for that specific purpose. In MPEG-DASH language, a "chunk" is also called a "segment," so there may be some mixing of terminology in the following lists. The terms should be treated as interchangeable.

Chunk addressing schemes

The following chunk addressing schemes define how chunk URLs are identified in the MPD file:

  • Segment List. A complete list of chunk URLs is provided for all available chunks.
  • Segment Template: Time-Based. A URL template is provided from which clients build a chunklist where the chunk URLs include chunk start times.
  • Segment Template: (Chunk) Number-Based. A URL template is provided from which clients build a chunklist where the chunk URLs include chunk numbers (like index numbers).
  • Segment Base - BaseURL. A non-chunked scheme where a single chunk is identified with a single URL (BaseURL), with the intent that the content will be retrieved through byte-range requests. (Not supported in Wowza Streaming Engine)

Media container formats

The following media container formats are supported:

  • ISO base media file format (IBMFF)
  • WebM (Wowza Streaming Engine 4.4.0 and later)
  • MPEG-2 TS (Not supported in Wowza Streaming Engine)

Content encoding formats

Media content can be represented in the MPD file as:

  • Non-multiplexed. Audio, video, and data are provided in separate chunks, resulting in separate chunklists (possibly multiple bitrate renditions of each media content type).
  • Multiplexed. Audio, video, and data are muxed together in each chunk, resulting in a single chunklist (per bitrate rendition). (Not supported in Wowza Streaming Engine)

Manifest profiles

MPEG-DASH combines the above delivery format options into specific combinations called DASH media presentation conformance "profiles." According to the MPEG-DASH specification, the profiles are defined to enable interoperability and to signal the use of features. The profile(s) are identified by unique uniform resource names (URNs) in the MPD@profiles attribute in the MPD.

Wowza Streaming Engine supports the following MPEG-DASH media presentation profiles:

  • "urn:mpeg:dash:profile:isoff-live:2011". Supports ISOBMFF container, VOD and live streaming, using either the Segment Template: Time-Based or the Segment Template: Number-Based chunk addressing scheme.
  • "urn:mpeg:dash:profile:isoff-main:2011". Supports ISOBMFF container, VOD and live streaming, using the Segment List chunk addressing scheme.

Additionally, within these profiles, the Wowza media server only encodes the media into non-multiplexed chunks where audio, video, and data are provided in separate chunks/chunklists. This is generally accepted as the best option for supporting adaptive bitrate switching with the ISOBMFF file format. Support for other profiles or formats may be added at a future date.

About MPD URL syntax


The Wowza media server supports multiple MPEG-DASH MPD formats; therefore, a method is needed to enable a client to specify which manifest format it wants. This can be done by providing specific tokens in the file name part of the MPD URL, using the following format:

http://[wowza-ip-address]:[port]/[application]/[appInstance]/[streamName]/manifest_mp[manifest-profile]_mv[manifest-variation].mpd

The mp [manifest-profile] token defines the manifest chunk "profile" (container and encoding formats) as follows:

  • mpm4sav. ISOBMFF chunk container (m4s), non-multiplexed chunks. This is the default value.
  • mpwebmmuxed. WebM chunk container, multiplexed chunks (Wowza Streaming Engine 4.4.0 and later). For more information about creating a WebM stream, see How to transcode live streams to WebM for MPEG-DASH playback.

Note: The following manifest profiles are NOT supported in Wowza Streaming Engine:

  • mpm4smuxed. ISOBMFF chunk container (m4s), multiplexed chunks

  • mpmp2t. MPEG-2 TS chunk container, muxed by default

  • mpwebmav. WebM chunk container, non-multiplexed chunks

If the mp token is missing, the manifest-profile value defaults to mpm4sav.

The mv [manifest-variation] token defines the chunk addressing scheme as follows:

  • mvtime. Segment Template: Time-Based (default value)
  • mvlist. Segment List
  • mvnumber. Segment Template: (Chunk) Number-Based

If the mv token is missing, the manifest-variation value defaults to mvtime.

URL examples

The following URLs can be used to retrieve a DASH MPD for a live stream that provides non-multiplexed audio/video/data chunks in ISOBMFF containers (mpm4sav) using the specified chunk addressing scheme.

Segment List (mvlist)

http://localhost:1935/live/myStream/manifest_mpm4sav_mvlist.mpd
http://localhost:1935/live/myStream/manifest_mvlist.mpd

Segment Template: Time-Based (mvtime)

http://localhost:1935/live/myStream/manifest_mpm4sav_mvtime.mpd
http://localhost:1935/live/myStream/manifest_mvtime.mpd
http://localhost:1935/live/myStream/manifest.mpd

Segment Template: Number-Based (mvnumber)

http://localhost:1935/live/myStream/manifest_mpm4sav_mvnumber.mpd
http://localhost:1935/live/myStream/manifest_mvnumber.mpd

About MPD redirects


To provide statistics for tracking/monitoring server usage, the Wowza media server maintains an HTTP session "context" for each streaming playback session. With other HTTP streaming technologies, the session is created when a player requests the manifest. The server doesn't expect the client to make additional requests for the same manifest in the same playback session, or else a new session would be created.

One issue that MPEG-DASH presents in this area is that for live DASH streaming sessions, the player MUST periodically (by design) re-request the DASH MPD to identify the availability of new chunks, or the expiration of old ones. For the Wowza media server, a new HTTP session would be created erroneously whenever a player re-requests the DASH MPD. This issue is addressed in Wowza Streaming Engine by using a redirect mechanism within the MPD or by using HTTP redirects.

MPD.Location redirects

DASH MPD.Location redirects involve support for the MPD.Location element in the DASH MPD, which provides functionality similar to HTTP redirects.

  • The MPD.Location provides an updated version of the original DASH MPD URL that has a Wowza sessionID embedded in the URL's file name.
  • Players are expected to use the updated URL for all future MPD requests for that session.
  • MPD.Location is provided in all MPDs returned, not just the first one.
  • A new session is created only for MPD requests where the request URL doesn't have sessionID information. Otherwise, the server just uses the provided sessionID and continues within the same HTTP session.

For example:

Original URL
http://[wowza-ip-address]:1935/vod/mp4:sample.mp4/manifest_mpm4sav_mvlist.mpd
New URL
http://[wowza-ip-address]:1935/vod/mp4:sample.mp4/manifest_mpm4sav_mvlist_w1499067310.mpd
Where w1499067310 is the embedded sessionID.

MPD HTTP redirects

With DASH MPD HTTP redirects, the Wowza media server is configured to respond to a player's initial DASH MPD request with an HTTP redirect status code (302, 307, and so on).

  • The Location header in the HTTP redirect response provides an updated version of the original DASH MPD URL that has a Wowza sessionID embedded in the URL's file name.
  • Players are expected use the new URL for all future MPD requests for that session.
  • Redirects that are implemented via server-side API calls (httpSession.redirectSession()) are executed before DASH-session-related redirects so that the correct server creates/manages the HTTP session (that server would then do the DASH redirect if required). Some potential for server-side redirection conflicts exists, so take care in this area.
  • For this mechanism to have the desired effect, the redirect URL must be stored by the client DASH player and used for all future MPD requests during the session. The original MPD URL that has no Wowza sessionID information must not be used again in the session.
  • A new session is created only for MPD requests where the request URL doesn't have sessionID information. Otherwise, the server uses the provided sessionID and continues within the same HTTP session.
  • By default, the server's HTTP redirect provides a 307 (Temporary Redirect) status code. But for HTTP 1.0, the server "overrides" that with a 302 redirect. The mpegdashHttpRedirectDisableStatusCode302Override and mpegdashHttpRedirectDefaultStatusCode properties allow you to modify that default behavior.

To enable DASH MPD HTTP redirects, you must configure the mpegdashHttpRedirectEnabled property in the Wowza media server configuration.

Note: We strongly recommend that DASH players provide support for DASH MPD.Location redirects to avoid potential issues with HTTP redirects. With DASH MPD.Location redirects, players are guaranteed to have direct access to the redirect information (the redirected URL) because they're already parsing the DASH MPD.


If you're having problems or want to discuss this article, post in our forum.