确定 MPD 文件中 DASH 介质段的$Number



如果 MPD 文件没有任何段 URL 的列表,如何确定 DASH 介质片段的$Number?它只有一个区段模板标签,所以我不知道与此 MPD 关联的媒体有多少个区段。以下为 MPD 文件:

<?xml version="1.0" encoding="UTF-8" ?>
<MPD profiles="urn:mpeg:dash:profile:isoff-live:2011" type="dynamic" availabilityStartTime="2017-09-24T02:32:58Z" minimumUpdatePeriod="PT2.0S" minBufferTime="PT1S" timeShiftBufferDepth="PT2M" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd">
  <Period start="PT0S">
    <AdaptationSet mimeType="video/mp4" startWithSAP="1" segmentAlignment="true">
      <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" />
      <ContentProtection schemeIdUri="urn:uuid:5E629AF5-38DA-4063-8977-97FFBD9902D4">
        <mas:MarlinContentIds xmlns:mas="marlin:mas:1-0:services:schemas:mpd" >
          <mas:MarlinContentId>urn:marlin:kid:48e495a75aefaa2f22a8c15f8c564afa</mas:MarlinContentId>
        </mas:MarlinContentIds>
      </ContentProtection>
      <SegmentTemplate timescale="10000000" presentationTimeOffset="311133404" duration="20000000" startNumber="1" media="$RepresentationID$_Segment-$Number$.m4v" initialization="$RepresentationID$_init.m4i" />
      <Representation width="1920" height="1080" frameRate="25" codecs="avc1.640029" scanType="progressive" id="Stream_0_1600000" bandwidth="1600000" />
      <Representation width="1920" height="1080" frameRate="25" codecs="avc1.640029" scanType="progressive" id="Stream_1_2600000" bandwidth="2600000" />
      <Representation width="1920" height="1080" frameRate="25" codecs="avc1.640029" scanType="progressive" id="Stream_2_3900000" bandwidth="3900000" />
      <Representation width="1920" height="1080" frameRate="25" codecs="avc1.640029" scanType="progressive" id="Stream_3_4800000" bandwidth="4800000" />
    </AdaptationSet>
    <AdaptationSet mimeType="audio/mp4" startWithSAP="1" lang="ita" segmentAlignment="true">
      <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" />
      <ContentProtection schemeIdUri="urn:uuid:5E629AF5-38DA-4063-8977-97FFBD9902D4">
        <mas:MarlinContentIds xmlns:mas="marlin:mas:1-0:services:schemas:mpd" >
          <mas:MarlinContentId>urn:marlin:kid:48e495a75aefaa2f22a8c15f8c564afa
          </mas:MarlinContentId>
        </mas:MarlinContentIds>
      </ContentProtection>
      <SegmentTemplate timescale="10000000" presentationTimeOffset="311133404" duration="20000000" startNumber="1" media="$RepresentationID$_Segment-$Number$.m4a" initialization="$RepresentationID$_init.m4i" />
      <Representation audioSamplingRate="48000" codecs="mp4a.40.5" id="Stream_4_96000" bandwidth="96000" />
    </AdaptationSet>
  </Period>
</MPD>

我很难理解下一段$Number是如何计算的。

对于实时清单,您必须根据事件的开始时间计算近似的段数,即计算经过的持续时间(自事件开始以来的时间)到现在(挂钟时间 - 开始时间)。将其除以每个段的固定持续时间。

由于 startNumber=1,我们可以通过计算 startNumber + (elapsedDur/segmentDur) 来获取最新的段号。

恕我直言,这是保持较小清单大小的好方法。但这需要 DASH 客户端同步其时钟。否则,您最终将请求不存在的段号(太早或太晚)。如果尚未宣传细分市场,您还会遇到很多 404。

相关内容

  • 没有找到相关文章

最新更新