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:
- Click the Applications tab at the top of the page and then select your application in the contents panel.
- Click the Setup tab on your application's page and then click Edit.
- Under Playback Types, select MPEG-DASH.
- Click Save.
- 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
- Click the Applications tab and then select your application in the contents panel.
- On the details page Properties tab, click Custom in the Quick Links bar.
- In the Custom area, click Edit.
- Click Add Custom Property, specify the settings for one of the following properties in the Add Custom Property dialog box, and then click Add.
- 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:
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
- Secure MPEG-DASH streams using Common Encryption in Wowza Streaming Engine
- Debug MPEG-DASH streaming in Wowza Streaming Engine
- Transcode live streams to WebM for MPEG-DASH playback with Wowza Streaming Engine
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:
- 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 Transcode live streams to WebM for MPEG-DASH playback with Wowza Streaming Engine.
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.