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
:
$ 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
:
$ 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"
We use ffmpeg
‘s 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 fileSequence0.ts
, 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 hls
muxer.