Create m3u8 file from list of ts files

Mohammad Hossein Gerami picture Mohammad Hossein Gerami · Aug 28, 2018 · Viewed 14.4k times · Source

I want to create 'm3u8' file from the list of ts files. How can I do it?

I did search in google & read documentation of ffmpeg but I didn't find anything.

Answer

thornfish picture thornfish · Sep 1, 2018

It's not clear which of the following cases you're asking about, so here's a quick answer for both:

1) If you're starting with a single file that contains your content This is the most common case. In general, there are three steps to creating a playable HlS stream from source material.

  • for each desired output level (let’s say Bitrate for simplicity), you need to create a collection of segmented .ts files.
  • For each output level you need a playlist manifest (m3u8) that contains the list of segment files making up the content.
  • For the whole stream you need a single master manifest (another m3u8) that lists the playlists.

FFMpeg can do all three of these.

2) If you're starting with a collection of .ts files If you really are starting with a collection of .ts files, you could either hand-build an m3u8 file as described in the previous answer, or you could write a script to do it.

In either case, there are some considerations for the .ts files:

  • If the segment files do not belong to an uninterrupted sequence (as they would if they were transcoded from a single source clip for use in HLS), you’ll need to insert EXT-X-DISCONTINUITY tags between segments that don’t have the same encoding characteristics or that don’t have monotonically increasing PTS (presentation timestamp) values.

  • While the segments don't need to all be the same length, the longest one must not exceed the (integer) number of seconds specified in the EXT-X-TARGETDURATION tag.

  • The maximum bitrate for all the segments must not exceed the value specified in the EXT-X-TARGETDURATION tag.

When you've built your m3u8 file, it helps to run it through a validator to find any problems.This is a lot easier than scratching your head wondering why an HLS stream plays poorly or inconsistently across players/browsers.