为什么 MPEG-DASH 播放从我的 SegmentTemplate startNumber 的 2 倍开始?

Why is MPEG-DASH playback beginning at 2X my SegmentTemplate startNumber?

我正在构建基于 HTTP 的动态自适应流式传输 (DASH) 服务。这是它发布的 .mpd 文件:

<?xml version="1.0" encoding="UTF-8"?>
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd" profiles="urn:mpeg:dash:profile:isoff-live:2011" type="dynamic" minBufferTime="PT0S">
  <ProgramInformation>
    <Title>My Stream</Title>
    <Source>Music Inc</Source>
  </ProgramInformation>
  <Period>
    <AdaptationSet id="3" mimeType="audio/mp4" segmentAlignment="true" audioSamplingRate="48000.0" codecs="mp4a.40.2" startWithSAP="1" lang="eng">
      <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" id="2"/>
      <BaseURL></BaseURL>
      <SegmentTemplate initialization="mystream-$RepresentationID$-IS.mp4" media="mystream-$RepresentationID$-$Number$.m4s" startNumber="163428046" timescale="1" duration="10"/>
      <Representation id="128kbps" bandwidth="128000"/>
    </AdaptationSet>
  </Period>
</MPD>

但是,当我打开此流(在 VLC 中)时,我在日志中看到 404 错误:

adaptive error: Failed reading https://************:443/mystream-128kbps-326856092.m4s: HTTP/1.1 404 Not Found
adaptive error: Failed reading https://************:443/mystream-128kbps-326856093.m4s: HTTP/1.1 404 Not Found

请注意,VLC 尝试定位的第一个分段模板编号是 326856092,恰好是 startNumber="163428046"

在 MPD 中指定的预期编号的 2 倍

首先,您创建了一个 dynamic 清单,这意味着它用于直播。

播放直播时,播放器不会从第一段开始,它会根据您在清单中提供的信息尝试确定直播边缘。活边随着挂钟前进。

由于您没有提供任何类型的信息,例如 availabilityStartTime、句点 start 等,它仅使用清单发布的时间 - 在您的情况下是 HTTP 的时间响应 - 和片段持续时间。

例如:

publishTime = 1634310000

currentSegmentNumber = startNumber + publishTime * timescale / duration
                     = 163428046 + 1634310000 * 1 / 10
                     = 326859046

如果由于某种原因您的 startNumber 对应于您生成清单时的当前纪元时间,它将尝试正好从 2x 开始。

如果您想从内容的开头开始,也许您需要一个 static VoD 播放列表。

在此处阅读更多内容:DASH-IF Timing Model