Debug Wowza nDVR ABR stream alignment

A common problem with Wowza nDVR adaptive-bitrate (ABR) streaming is that the stream renditions fall out of alignment. This article describes how to use a Wowza Streaming Engine™ media server software HTTP provider to query one or more ABR streams (renditions) and display their timing side by side so that it's easy to see if they align properly.

  1. Download wms-plugin-dvrreporter.jar module.
  2. Copy the wms-plugin-dvrreporter.jar module to your Wowza Streaming Engine installation library at [install-dir]/lib.
  3. Navigate to [install-dir]/conf/ and open VHost.xml in a text editor.
  4. Add the following provider to the <HTTPProviders> element in the Admin HostPort section. Add it to the top of the list, before the HTTPServerInfoXML provider:
<HTTPProvider>
	<BaseClass>com.wowza.wms.plugin.dvr.reporter.HTTPDvrManifestReporter</BaseClass>
	<RequestFilters>dvrreport*</RequestFilters>
	<AuthenticationMethod>none</AuthenticationMethod>
</HTTPProvider>
  1. While the nDVR ABR stream is running, enter the following in a browser:
http://[wowza-host]:8086/dvrreport?app=myApp&streams=livestream1,livestream2

This command queries each of the streams (livestream1, livestream2, and so on) and shows the following:

  • Basic status information for each stream
  • Time map information
  • A partial manifest for audio and video chunks

The time map has an entry for each time the DVR-time to packet-time mapping has changed. A stream with no gaps has a single time map entry. Streams with gaps contain "1 + [number of time gaps]" time map entries. By default the manifest shows the first and last chunks as well as any chunks that span time resets. So if the time resets at chunk 51, the manifest includes information for chunks 50 and 51.

To refine the query, use any of these optional parameters:

  • forceLoad=true|false – By default, the DVR store must already be loaded. To force it to load, use forceLoad=true.
  • fullManifest=true|false – By default, a partial manifest is returned. To return the complete manifest, use fullManifest=true.
  • format=table|raw|manifest – You can specify that the information be returned in one of three formats:
  • raw – Comma-separated, unformatted information about the DVR recording.
  • manifest – XML-style format, similar to the format used in the DVR manifest folders. This may provide useful information in conjunction with a full manifest to create a DVR ABR test case.
  • table – The default. Information in a HTML tables.