How to debug DVR ABR stream alignment

One of the common problems with Wowza nDVR adaptive bitrate (ABR) streams is that the streams aren't aligned properly or they fall out of alignment. This article describes how to use an HTTP Provider that queries one or more ABR streams and displays their timing side-by-side so that it's easy to see if the streams align properly.

To use:

  1. Download wms-plugin-dvrreporter.jar module.
     
  2. Copy the wms-plugin-dvrreporter.jar module into the lib folder in your Wowza media server installation ([install-dir]/lib).
     
  3. Open the [install-dir]/conf/VHost.xml file in a text editor and add the following HTTP Provider to the list of <HTTPProviders> in the Admin HostPort section. Be sure to add this HTTP Provider to the top of the <HTTPProviders> (or at least before the ServerInfoXML HTTP Provider):
    <HTTPProvider>
    	<BaseClass>com.wowza.wms.plugin.dvr.reporter.HTTPDvrManifestReporter</BaseClass>
    	<RequestFilters>dvrreport*</RequestFilters>
    	<AuthenticationMethod>none</AuthenticationMethod>
    </HTTPProvider>
  4. 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. For a stream with no gaps, there would be a single time map entry. Otherwise, it will contain "1 + (number of time gaps)" time map entries. The manifest shown by default will contain the first chunk and last chunk. In between it will show any chunks that span time resets. So, if the time resets at chunk 51, the manifest includes chunk information for chunk 50 and chunk 51.

    Other URL param options are:
     
    • forceLoad=true|false: By default, the DVR store must already be loaded. To force it to be loaded, add "forceLoad=true" to the command.
    • fullManifest=true|false: By default, a partial manifest is returned. To return the entire manifest, add "fullManifest=true" to the command.
    • format=table|raw|manifest: By default, a page with HTML tables is returned. Other formats include:
       
      • "raw" - returns comma-separated, unformatted information about the DVR recording.
      • "manifest" - returns XML-style format, similar to the format used in the DVR manifest folders. This may provide useful information in conjunction with "fullManifest" to create a DVR ABR test case.
      • "table" - returns default HTML table format.

 

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