Search code examples
iframehttp-live-streamingm3u8

HTTP Live Streaming (m3u8) I-Frames location


What is the recommend location of the I-Frames within an HTTP Live Streaming session?

I know that, if I were to use the #EXT-X-I-FRAMES-ONLY tag, then every segment contains exactly 1 I-Frame at the very beginning of the segment.

But what if I am not using this tag?

What if I strictly create segments based on length of time?

If a segment doesn't start with an I-Frame, do players typically assume they should calculate the images based on the last I-Frame from the previous segment? If so, then why would I even create a #EXT-X-I-FRAMES-ONLY playlist?


Solution

  • It is recommended the the first frame in the TS be an I-frame, however it is not required. If a segment doesn't start with a iframe, it will play fine assuming it has already downloaded and played the previous segment. This may not be true however, if your user jumps into the middle of a live stream, switches bitrates, or seeks within a VOD. In the case of a play or seek event, the player can download the previous segment (if available) and look for an I frame, or drop frames until the first iframe is found. If it is a multibitrate stream it can continue to play the old stream until a keyframe in the new stream is found. But this increases bandwidth usage, and will almost certainly result in buffering.

    The #EXT-X-I-FRAMES-ONLY playlist can be used for preview images while scrubbing through the content.