为什么 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
我正在构建基于 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"
首先,您创建了一个 dynamic
清单,这意味着它用于直播。
播放直播时,播放器不会从第一段开始,它会根据您在清单中提供的信息尝试确定直播边缘。活边随着挂钟前进。
由于您没有提供任何类型的信息,例如 availabilityStartTime
、句点 start
等,它仅使用清单发布的时间 - 在您的情况下是 HTTP 的时间响应 - 和片段持续时间。
例如:
publishTime = 1634310000
currentSegmentNumber = startNumber + publishTime * timescale / duration
= 163428046 + 1634310000 * 1 / 10
= 326859046
如果由于某种原因您的 startNumber
对应于您生成清单时的当前纪元时间,它将尝试正好从 2x 开始。
如果您想从内容的开头开始,也许您需要一个 static
VoD 播放列表。
在此处阅读更多内容:DASH-IF Timing Model