Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to create a MPD file of MPEG-DASH to play a webm video?

I'm following this demo which uses mediaSource API and MPEG DASH standard to play a .webm video. This is the MPD file used:

<?xml version="1.0" encoding="UTF-8"?>
<MPD
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns="urn:mpeg:DASH:schema:MPD:2011"
  xsi:schemaLocation="urn:mpeg:DASH:schema:MPD:2011"
  type="static"
  mediaPresentationDuration="PT888.05S"
  minBufferTime="PT1S"
  profiles="urn:webm:dash:profile:webm-on-demand:2012">
  <Period id="0" start="PT0S" duration="PT888.05S" >
  <AdaptationSet id="0" mimeType="video/webm" codecs="vp8" lang="eng" width="720"      height="306" subsegmentAlignment="true" subsegmentStartsWithSAP="1" bitstreamSwitching="true">
  <Representation id="1" bandwidth="534144">
    <BaseURL>mevq_logo_720x306_0250k_int-150-150.webm</BaseURL>
    <SegmentBase indexRange="29052226-29054708">
      <Initialization range="0-229" />
    </SegmentBase>
  </Representation>
  <Representation id="2" bandwidth="1078766">
    <BaseURL>mevq_logo_720x306_0500k_int-150-150.webm</BaseURL>
    <SegmentBase indexRange="56003676-56006200">
      <Initialization range="0-229" />
    </SegmentBase>
  </Representation>
  <Representation id="3" bandwidth="1745140">
    <BaseURL>mevq_logo_720x306_0750k_int-150-150.webm</BaseURL>
    <SegmentBase indexRange="83686040-83688577">
      <Initialization range="0-229" />
    </SegmentBase>
  </Representation>
  <Representation id="4" bandwidth="2295403">
    <BaseURL>mevq_logo_720x306_1000k_int-150-150.webm</BaseURL>
    <SegmentBase indexRange="111588024-111590567">
      <Initialization range="0-229" />
    </SegmentBase>
  </Representation>
  <Representation id="5" bandwidth="3797938">
    <BaseURL>mevq_logo_720x306_1500k_int-150-150.webm</BaseURL>
    <SegmentBase indexRange="166960740-166963291">
      <Initialization range="0-229" />
    </SegmentBase>
  </Representation>
  <Representation id="6" bandwidth="6418657">
    <BaseURL>mevq_logo_720x306_2000k_int-150-150.webm</BaseURL>
    <SegmentBase indexRange="222165200-222167753">
      <Initialization range="0-229" />
    </SegmentBase>
  </Representation>
</AdaptationSet>
<AdaptationSet id="1" mimeType="audio/webm" codecs="vorbis" lang="eng" audioSamplingRate="41000" subsegmentStartsWithSAP="1">
  <Representation id="7" bandwidth="115479">
    <BaseURL>evq_vorbis_128kbps_cues-5sec_tracks-2.webm</BaseURL>
    <SegmentBase indexRange="11944509-11947524">
      <Initialization range="0-4501" />
    </SegmentBase>
  </Representation>
</AdaptationSet>

Does anybody know how to obtain/calculate the numbers 'SegmentBase indexRange' and 'Initialization range' for any video?

like image 636
Silvia Avatar asked Feb 07 '13 12:02

Silvia


People also ask

What is DASH MPD file?

MPEG-DASH is an adaptive bitrate streaming technique that enables streaming of media content over the Internet delivered from conventional HTTP web servers. A media presentation description (MPD) file is used to hold the information on the various streams and the bandwidths they are associated with.

How do I play MPEG-DASH files?

Simply enter the URL of your mpeg-dash stream (. mpd file) into Castr's Dash player and press play. If everything goes well, the video will playback smoothly. Make sure your URL are HTTPS- compatible, otherwise your stream may not play.

How do you play a DASH video format?

To play the video a DASH file contains, you must: Combine all the DASH files that comprise a single streamed video into one DASH file. Convert the combined DASH file into an MP4 file.


1 Answers

indexRange contains Segment Index Box (sidx). It is basically metadata fragment that contains information about the fragments the player should request when downloading the file. This is a quote from the spec:

"indexRange specifies the byte range that contains the Segment Index in all Media Segments of the Representation. The byte range shall be expressed and formatted as a byte-range-spec as defined in RFC 2616, Clause 14.35.1. It is restricted to a single expression identifying a contiguous range of bytes."

sidx box is described in HERE and a parser can be found HERE and HERE(from dash.js project)

Initialization - According to spec:

"specifies the URL including a possible byte range for the Initialization Segment."

Hope it helped!

like image 68
inbaly Avatar answered Sep 20 '22 17:09

inbaly