Stream over MPEG-DASH with Wowza Streaming Engine

Wowza Streaming Engine™ media server software includes support for MPEG Dynamic Adaptive Streaming over HTTP (MPEG-DASH) as specified by ISO/IEC 23009-1. Wowza Streaming Engine supports both live and VOD MPEG-DASH streaming.

Note: Wowza Streaming Engine does not support closed captioning in MPEG-DASH streams.

Enable MPEG-DASH streaming


MPEG-DASH streaming is enabled by default when you create a Wowza Streaming Engine live or VOD application. If you need to re-enable MPEG-DASH streaming for an application, complete the following steps:

  1. Click the Applications tab at the top of the page and then select your application in the contents panel.
  2. Click the Setup tab on your application's page and then click Edit.
  3. Under Playback Types, select MPEG-DASH.
  4. Click Save.
  5. Restart the application.

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

You can now stream MPEG-DASH with your application. To configure optional MPEG-DASH properties to customize your MPEG-DASH streaming configuration, continue to the following section.

Configure MPEG-DASH properties


  1. Click the Applications tab and then select your application in the contents panel.
  2. On the details page Properties tab, click Custom in the Quick Links bar.
  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.
  5. Click Save and then restart the application to apply the changes.

MPEG-DASH property reference

Note: Wowza Streaming Engine does not support closed captioning in MPEG-DASH streams.

The following properties use the /Root/Application/HTTPStreamer path:

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.

The following properties use the /Root/Application path:

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>.

Play MPEG-DASH streams


You can play MPEG-DASH streams with third-party players or you can test playback using the MPEG-DASH player on the Video Test Players webpage.

Use third-party players to play MPEG-DASH streams

  • Bitmovin's HTML5 Adaptive Streaming Player plays MPEG-DASH and HLS streams.
  • Google's open source Shaka Player library. 

Note: Wowza Streaming Engine and MPEG-DASH clients must be time-synchronized for correct functionality. Live MPEG-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 manifest 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 on the server. Specification of this algorithm is implementation-dependent and beyond the scope of Wowza support.

More resources


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 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. Supported in 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, Wowza Streaming Engine 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.

MPD URL syntax

Wowza Streaming Engine 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://[address]:[port]/[application-name]/[app-instance]/[stream-name]/manifest_mp[manifest-profile]_mv[manifest-variation].mpd

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

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/myApplication/myStream/manifest_mpm4sav_mvlist.mpd

http://localhost:1935/myApplication/myStream/manifest_mvlist.mpd

Segment Template: Time-Based (mvtime)

http://localhost:1935/myApplication/myStream/manifest_mpm4sav_mvtime.mpd

http://localhost:1935/myApplication/myStream/manifest_mvtime.mpd

http://localhost:1935/myApplication/myStream/manifest.mpd

Segment Template: Number-Based (mvnumber)

http://localhost:1935/myApplication/myStream/manifest_mpm4sav_mvnumber.mpd

http://localhost:1935/myApplication/myStream/manifest_mvnumber.mpd

MPD redirects

To provide statistics for tracking and monitoring server usage, Wowza Streaming Engine 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 Wowza Streaming Engine, 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, if the original URL is:

http://[address]:1935/[application-name]/mp4:sample.mp4/manifest_mpm4sav_mvlist.mpd

The new URL is:

http://[address]:1935/[application-name]/mp4:sample.mp4/manifest_mpm4sav_mvlist_w1499067310.mpd

Where w1499067310 is the embedded sessionID.

MPD HTTP redirects

With DASH MPD HTTP redirects, Wowza Streaming Engine 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 Streaming Engine server configuration.