2
votes

I got a sample mpd file from http://dash-mse-test.appspot.com/media.html and below is a snippet containing a single Representation.

   ...
   <Representation bandwidth="4190760" codecs="avc1.640028" height="1080" id="1" mimeType="video/mp4" width="1920">
    <BaseURL>car_cenc-20120827-89.mp4</BaseURL>
    <SegmentBase indexRange="2755-3230">
      <Initialization range="0-2754" />
    </SegmentBase>
  </Representation>
  ...

What does SegmentBase mean? What does the value of indexRange mean?

Initialization end range is always one less than the indexRange start value. ie., in the above 2755-1 = 2754 (the value of Initialization)

Can anyone help me understand the significance of these number?

EDIT 1:

As per the answer by @sander below, I understand segmentindex is byte range. However, I am still confused about how to use this value.

For eg: <Representation bandwidth="4190760" codecs="avc1.640028" height="1080" id="1" mimeType="video/mp4" width="1920"> <BaseURL>car-20120827-89.mp4</BaseURL> <SegmentBase indexRange="674-1149"> <Initialization range="0-673" /> </SegmentBase> </Representation>

There is only one segment in this representation containing the entire video clip in a single file. (the file size is about 90mb).

Initialization Range mentions 0-673. So from the 0th byte of the file to the 673rd byte of the file contains the initialization segment for the video. Is my understanding right?

If so, the file is about 90mb. How does one get the other segments by byte range? SegmentBase only mentions the indexRange 674-1149.

BTW, I am using this player to understand the segmentindex.

http://dash-mse-test.appspot.com/dash-player.html?url=http://yt-dash-mse-test.commondatastorage.googleapis.com/media/car-20120827-manifest.mpd

Looking at the header request sent using Chrome's inspect tool, there is a lot of request happening in small byte ranges but I am not sure how does one get these byte ranges from the MPD.


Thanks

1

1 Answers

3
votes

The exact format of this file is described in the DASH specification (ISO/IEC 23009-1). The SegmentBase element is described in chapter 5.3.9.2.

My interpretation of this snippet is that this Representation consists of a single mp4 file that is delivered to the player as one segment. The indexRange is the range of bytes within this segment that represents the segment index (the sidx box in the mp4 file) and the Initialization element indicates the range of bytes that includes any relevant initialization data (the various header boxes in the mp4 file). As you note, the ranges neatly cover the beginning of the segment, with the rest presumably filled with media sample data. The byte ranges inform the player where exactly it should load the relevant data from.

Edit: The sidx box contains the byte ranges that reference the sub-segments of this single mp4 file. Quoting from ISO/IEC 14496-12:2012(E):

Each Segment Index box documents how a (sub)segment is divided into one or more subsegments (which may themselves be further subdivided using Segment Index boxes).

A subsegment is defined as a time interval of the containing (sub)segment, and corresponds to a single range of bytes of the containing (sub)segment. The durations of all the subsegments sum to the duration of the containing (sub)segment.

Based on the contents of the sidx box, the player can determine which parts of the mp4 file it needs to download in order to play a specific piece of the video.