Скомпилируйте init.mp4 и audio.mp4 с временной шкалой - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь завершить init.mp4 и его аудиофайл, используя copy / b init.mp4 + audio.mp4 complie.mp4

Он компилируется, но не может воспроизводиться на vlc и на ffmpegplay.

Когда я проверял файл mpd, я вижу, что он содержит аудио

            <SegmentTemplate timescale="48000" media="57_audio_1_17_$Number$.mp4?m=1532401844" initialization="57_audio_1_17_init.mp4?m=1532401844" startNumber="6815976">
                <SegmentTimeline>
                    <S t="1521333224447" d="479232" r="1"/>
                    <S t="1521334182911" d="483328"/>
                    <S t="1521334666239" d="479232" r="3"/>
                    <S t="1521336583167" d="483328"/>
                    <S t="1521337066495" d="479232" r="3"/>
                    <S t="1521338983423" d="483328"/>
                    <S t="1521339466751" d="479232" r="4"/>
                    <S t="1521341862911" d="483328"/>
                    <S t="1521342346239" d="479232" r="3"/>
                    <S t="1521344263167" d="483328"/>
                    <S t="1521344746495" d="479232" r="3"/>
                    <S t="1521346663423" d="483328"/>
                    <S t="1521347146751" d="479232" r="4"/>
                    <S t="1521349542911" d="483328"/>
                    <S t="1521350026239" d="479232" r="3"/>
                    <S t="1521351943167" d="483328"/>
                    <S t="1521352426495" d="479232" r="3"/>
                    <S t="1521354343423" d="483328"/>
                    <S t="1521354826751" d="479232" r="4"/>
                    <S t="1521357222911" d="483328"/>
                    <S t="1521357706239" d="479232" r="3"/>
                    <S t="1521359623167" d="483328"/>
                    <S t="1521360106495" d="479232" r="3"/>
                    <S t="1521362023423" d="483328"/>
                    <S t="1521362506751" d="479232" r="4"/>
                    <S t="1521364902911" d="483328"/>
                    <S t="1521365386239" d="479232" r="3"/>
                    <S t="1521367303167" d="483328"/>
                    <S t="1521367786495" d="479232" r="3"/>
                    <S t="1521369703423" d="483328"/>
                    <S t="1521370186751" d="479232" r="4"/>
                    <S t="1521372582911" d="483328"/>
                    <S t="1521373066239" d="479232" r="3"/>
                    <S t="1521374983167" d="483328"/>
                    <S t="1521375466495" d="479232" r="3"/>
                    <S t="1521377383423" d="483328"/>
                </SegmentTimeline>
            </SegmentTemplate>
        </Representation>

Может кто-нибудь объяснить, что это такое?И эти значения t, r, dКак добавить эти аудиосегменты в complie.mp4 и заставить его воспроизводить?

1 Ответ

0 голосов
/ 10 апреля 2019

Сначала вам нужно скачать 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?

...