我正在尝试重复使用最初使用实时个人资料生成但现在需要重播的一组MPEG-DASH视频。
经过一段时间的游戏似乎比我原先预期的更复杂,只是将类型从dynamic
改为static
大概不起作用,因为我们也错过了像视频显然不会出现在实时场景中但是按需播放。我知道我可以重新构建流的完整.mp4,然后根据需要重新组合,但这似乎是错误的方法。 Mozilla状态here:
您可以在稍后阶段使用相同的媒体文件进行实时传输和VOD
所以必须有一些方法来做到这一点......
以下是原始广播live.mpd
中的清单文件:
<?xml version="1.0"?>
<!-- MPD file Generated with GPAC version 0.6.2-DEV-rev135-g2dd7b95-master at 2016-04-07T11:49:25.297Z-->
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT4.000S" type="dynamic" publishTime="2016-04-07T11:49:25Z" availabilityStartTime="2016-04-07T11:49:05.259Z" minimumUpdatePeriod="PT0H0M2.000S" maxSegmentDuration="PT0H0M4.011S" profiles="urn:mpeg:dash:profile:isoff-live:2011">
<ProgramInformation moreInformationURL="http://192.168.1.103:8080/recording_29/">
<Title>1</Title>
</ProgramInformation
<BaseURL>http://192.168.1.103:3000/bbc_apr16/uhd0/recording_29/</BaseURL>
<Period id="GENID_DEF" start="PT0H0M0.000S">
<AdaptationSet segmentAlignment="true" lang="und">
<SegmentTemplate timescale="90000" media="live_$RepresentationID$_$Number$.m4s" startNumber="1" duration="360000" initialization="live_$RepresentationID$_.mp4"/>
<Representation id="audio" mimeType="audio/mp4" codecs="mp4a.40.2" audioSamplingRate="48000" startWithSAP="1" bandwidth="6868">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
</Representation>
</AdaptationSet>
<AdaptationSet segmentAlignment="true" maxWidth="3840" maxHeight="2160" maxFrameRate="25" par="16:9" lang="und">
<SegmentTemplate timescale="90000" media="live_$RepresentationID$_$Number$.m4s" startNumber="1" duration="360000" initialization="live_$RepresentationID$_.mp4"/>
<Representation id="video_2160p" mimeType="video/mp4" codecs="avc1.42c01f" width="3840" height="2160" frameRate="25" sar="1:1" startWithSAP="1" bandwidth="31726550">
</Representation>
<Representation id="video_720p" mimeType="video/mp4" codecs="avc1.42c01f" width="1280" height="720" frameRate="25" sar="1:1" startWithSAP="1" bandwidth="3175420">
</Representation>
</AdaptationSet>
</Period>
</MPD>
如果我重新播放它,它会尝试从现在开始检索实时文件(显然不存在)。
非常感谢任何帮助!
答案 0 :(得分:0)
好吧所以它实际上比我想象的要简单得多!
首先,您需要将type="dynamic"
更改为static
。这应该允许播放文件,好像它再次是直播,没有擦洗栏......
要恢复磨砂条,我们需要设置mediaPresentationDuration
。为了设置它,我们需要计算段的数量,然后将其乘以我的情况4000
毫秒的段持续时间。然后把它作为格式PT1H22M12.000S
。
所以在这个清单中我们可以用以下调整后的清单回放文件(注意我的BaseURL也错了......):
<?xml version="1.0"?>
<!-- MPD file Generated with GPAC version 0.6.2-DEV-rev135-g2dd7b95-master at 2016-04-07T11:49:25.297Z-->
<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" minBufferTime="PT4.000S" type="static" publishTime="2016-04-07T11:49:25Z" availabilityStartTime="2016-04-07T11:49:05.259Z" minimumUpdatePeriod="PT0H0M2.000S" maxSegmentDuration="PT0H0M4.011S" profiles="urn:mpeg:dash:profile:isoff-live:2011" mediaPresentationDuration="PT1H22M12.000S">
<ProgramInformation moreInformationURL="http://192.168.1.103:8080/recording_29/">
<Title>1</Title>
</ProgramInformation>
<Period id="GENID_DEF" start="PT0H0M0.000S">
<AdaptationSet segmentAlignment="true" lang="und">
<SegmentTemplate timescale="90000" media="live_$RepresentationID$_$Number$.m4s" startNumber="1" duration="360000" initialization="live_$RepresentationID$_.mp4"/>
<Representation id="audio" mimeType="audio/mp4" codecs="mp4a.40.2" audioSamplingRate="48000" startWithSAP="1" bandwidth="6868">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
</Representation>
</AdaptationSet>
<AdaptationSet segmentAlignment="true" maxWidth="3840" maxHeight="2160" maxFrameRate="25" par="16:9" lang="und">
<SegmentTemplate timescale="90000" media="live_$RepresentationID$_$Number$.m4s" startNumber="1" duration="360000" initialization="live_$RepresentationID$_.mp4"/>
<Representation id="video_2160p" mimeType="video/mp4" codecs="avc1.42c01f" width="3840" height="2160" frameRate="25" sar="1:1" startWithSAP="1" bandwidth="31726550">
</Representation>
<Representation id="video_720p" mimeType="video/mp4" codecs="avc1.42c01f" width="1280" height="720" frameRate="25" sar="1:1" startWithSAP="1" bandwidth="3175420">
</Representation>
</AdaptationSet>
</Period>
</MPD>
我在GitHub创建了一个小脚本来完成所有这些操作。