8

I am looking to convert between HLS and MPEG Dash. I do not access to the original fully concatenated video file, only the individual HLS segments.

In doing this transformation to MPEG Dash I need to supply an initialziation segment for the Dash manifest .mpd file.

My questions are:

  1. What is the structure of a Dash video initialization segment?
  2. How can I generate/create one without the need for the original full file?

Perhaps a solution would involve getting MP4Box to convert the '.ts' HLS segments to Dash '.m4s' segments which are self initializing, but I am unsure how to go about this this?

Any ideas are much appreciated.

Many thanks.

UPDATE: Snippet to stream using original hls segments. Video plays all the way through but is just black.

  <Representation width="426" height="238" frameRate="25" id="238p 400kbps" bandwidth="400000">
    <SegmentList timescale="25000" duration="112500">
           <SegmentURL media="video_0_400000/hls/segment_0.ts"/>
           <SegmentURL media="video_0_400000/hls/segment_1.ts"/>
          <SegmentURL media="video_0_400000/hls/segment_2.ts"/>
    </SegmentList>
   </Representation>
</AdaptationSet>
Mahout
  • 414
  • 1
  • 3
  • 12

1 Answers1

10

What is the structure of a Dash video initialization segment?

The initialization segment contains information required to initialize the video decoder. The initialization segment is optional (refer to ISO/IEC 23009-1).

For ISO BMFF (commonly known as mp4) this includes the moov box (specified in ISO/IEC 14496-12). For MPEG-TS usually there is no initialization segment. When present it contains several packets that carry the initialization data in a PES.

How can I generate/create one without the need for the original full file?

Converting HLS to MPEG-DASH is trivial if your target player supports the required features. First you need a player that supports MPEG-TS. Then you don't actually need an initialization segment because the initialization data is contained inside each HLS segment. To convert and HLS playlist to a MPEG-DASH mpd you have to create a segment list or a segment template. Here is an example:

HLS:

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:10
#EXTINF:10.0,
stream0.ts
#EXTINF:10.0,
stream1.ts
#EXTINF:10.0,
stream2.ts

MPD:

...
<SegmentList duration="10">
   <SegmentURL media="stream0.ts"/>
   <SegmentURL media="stream1.ts"/>
   <SegmentURL media="stream2.ts"/>
</SegmentList>
...

If your target player does not support MPEG-TS or SegmentList then you have to convert the HLS stream to MPEG-DASH by the use of some external tool like MP4Box.

Svetlin Mladenov
  • 4,307
  • 24
  • 31
  • Many thanks, this is really insightful. I don't believe I have a player which will support these HLS segments. Could you point me in the right direction for the mp4box command that will do this conversion? – Mahout Jan 05 '16 at 08:57
  • Sorry, I haven't had much experience with mp4box. I've tried it a couple of times but I don't remember the exact commands. I suggest you examine the [documentation](https://gpac.wp.mines-telecom.fr/mp4box/mp4box-documentation/). – Svetlin Mladenov Jan 05 '16 at 09:03
  • Using the SegmentList method above, I can play the video but the video is black all the way through. I have added the snippet at the end of the original post. – Mahout Jan 05 '16 at 09:28