Сначала вам нужно скачать init.mp4, а затем на основе SegmentTimeline загрузить сегменты.
Для <SegmentTemplate>
обычно используется тег <SegmentTimeline>
для указания длины каждого сегмента и повторения каких сегментов. Шкала времени (единицы для представления одной секунды) часто включается как часть атрибутов <SegmentTemplate>
, чтобы мы могли рассчитать время сегмента на основе этой единицы. В приведенном ниже примере тег <S>
обозначает тег сегмента, атрибут d
указывает длину сегмента, а атрибут r
указывает, сколько сегментов одинаковой длительности повторяется, так что $Time$
может быть правильно рассчитан. для загрузки медиа сегмента, как указано в атрибуте media
.
<SegmentTemplate>
timescale="48000"
initialization="$RepresentationID$-init.dash"
media="$RepresentationID$-$Time$.dash"
startNumber="1">
<SegmentTimeline>
<S t="0" d="96256" r="2" />
<S d="95232" />
<S d="96256" r="2" />
<S d="95232" />
<S d="96256" r="2" />
</SegmentTimeline>
</SegmentTemplate>
Ниже приведен пример шаблона сегмента из представления. Он использует переменную $ Time $.
<SegmentTemplate timescale="30000" media="155_video_1_2_$Time$.mp4?m=1545421124" initialization="155_video_1_2_init.mp4?m=1545421124" startNumber="710">
<SegmentTimeline>
<S t="255197799" d="360360" r="8"/>
<S t="258441039" d="334334"/>
</SegmentTimeline>
</SegmentTemplate>
URL-адрес запроса для первого сегмента: 155_video_1_2_ 255197799 .mp4 . При длительности 360360 следующий запрос сегмента будет 155_video_1_2_ 255558159 .mp4 и т. Д. Через девятый сегмент.
Последний запрос сегмента: 155_video_1_2_ 258441039 .mp4 .
Если шаблон сегмента использует $ Number $ вместо $ Time $, тогда вы загружаете файлы с начального номера, а затем повторяете, сколько раз указано в значке r.
<AdaptationSet
bitstreamSwitching="false"
contentType="video"
id="1"
mimeType="video/mp4"
segmentAlignment="true">
<SegmentTemplate
initialization="$RepresentationID$/init.mp4"
media="$RepresentationID$/$Number$.m4f"
startNumber="218646"
timescale="90000">
<SegmentTimeline>
<S
d="540540"
r="28"/>
</SegmentTimeline>
</SegmentTemplate>
<Representation
bandwidth="1199626"
codecs="avc1.4D001E"
frameRate="90000/3003"
height="480"
id="5501_video_seg_auto_video_32"
width="528"/>
</AdaptationSet>
Первым файлом будет начальный номер, а затем повторять сегменты 28 раз. Так что start + 28 - это 29 файлов плюс init.mp4.
218646.m4f
218647.m4f
218648.m4f
218649.m4f
218650.m4f
218651.m4f
218652.m4f
218653.m4f
218654.m4f
218655.m4f
218656.m4f
218657.m4f
218658.m4f
218659.m4f
218660.m4f
218661.m4f
218662.m4f
218663.m4f
218664.m4f
218665.m4f
218666.m4f
218667.m4f
218668.m4f
218669.m4f
218670.m4f
218671.m4f
218672.m4f
218673.m4f
218674.m4f
init.mp4
Затем вы можете преобразовать сегменты в файл .mp4.
cat init.mp4 > source.mp4
cat segment-1.m4f >> source.mp4
cat segment-2.m4f >> source.mp4
...
Ссылки:
https://developers.google.com/cast/docs/mpl/streaming_protocols
https://docs.aws.amazon.com/mediapackage/latest/ug/segtemp-format.html
Объединить сегменты MPEG-DASH (например, init.mp4 + сегменты.m4s) обратно в полный источник .mp4?