xml - 为什么 MPEG-DASH 播放从我的 SegmentTemplate startNumber 的 2 倍开始?
问题描述
我正在构建基于 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
MPD 中指定的预期编号的 2XstartNumber="163428046"
解决方案
首先,您创建了一个dynamic
清单,这意味着它用于直播。
播放实时流时,播放器不会从第一段开始,它将尝试根据您在清单中提供的信息确定实时边缘。实时边缘随着挂钟前进。
由于您没有提供任何类型的信息,例如availabilityStartTime
、 Periodstart
等,它仅使用清单发布的时间 - 在您的情况下是 HTTP 响应的时间 - 以及段持续时间。
例如:
publishTime = 1634310000
currentSegmentNumber = startNumber + publishTime * timescale / duration
= 163428046 + 1634310000 * 1 / 10
= 326859046
如果由于某种原因您startNumber
对应于生成清单时的当前 Epoch 时间,它将尝试准确地从 2x 开始。
static
如果您想从内容的开头开始,也许您需要一个VoD 播放列表。
在此处阅读更多信息:DASH-IF 时序模型
推荐阅读
- reactjs - I am using axios post request for sending data from react to express, why data saves in response configs not in data?
- rdf - Java代码实现OWLAnnotationPropertyAssertionAxiom
- excel - 具有定义的行和列的矩阵中的边界
- c# - 为什么在使用动画事件为角色添加音频脚步时,只有一只脚播放声音?
- java - How can exception message overtake an executed printed line
- iframe - iframe 限制
- android - 如何恢复协程的真实调用痕迹?
- mysql - Mysql:一个查询中的“SET @Variable = 0”[Java]
- java - 如何从数组列表中填充 JavaFX 中的 TableView
- java - 如何使用 Office 365 身份验证配置 Spring Security?