To stream video with HLS, you need to divide your video into segments of a fixed duration and add them to a playlist. In the book I use Apple’s HTTP Live Streaming tools to do this. Here’s an example using
$ mediafilesegmenter -f /Library/WebServer/Documents/vod sample.mov
This command takes the video (
sample.mov) and writes out the segments and the playlist to the
/Library/WebServer/Documents/vod directory. Unfortunately, Apple’s tools will only work on a Mac.
However, recent versions of
ffmpeg can also output HLS compatible files. Given a video as input, it will divide it into segments and create a playlist for us.
Here’s the equivalent of the command above using
$ ffmpeg -y \ -i sample.mov \ -codec copy \ -bsf h264_mp4toannexb \ -map 0 \ -f segment \ -segment_time 10 \ -segment_format mpegts \ -segment_list "/Library/WebServer/Documents/vod/prog_index.m3u8" \ -segment_list_type m3u8 \ "/Library/WebServer/Documents/vod/fileSequence%d.ts"
segment muxer to segment the video. We can specify the segment duration with the
-segment_time option. The last argument passed to
ffmpeg is the path to where the segments should be written; it contains a format specifier (
%d) similar to those supported by the
printf function in C. The
%d will be replaced with the current sequence number. In this example, the segments will be named
fileSequence1.ts, and so on.
And that’s how you process a video for streaming with HLS using
ffmpeg. There are other examples in the book, including how to use
ffmpeg to segment a live video stream, so if you want to learn how, buy your copy today.
In part 2 we’ll look at how to segment video using ffmpeg’s