FFMpegでHttp Live Streaming(HLS)向けにセグメント化する

CentOSにm3u8-segmenterをインストールするがほんのちょっぴり人気なので、FFMpeg単体でもセグメントできるよって話です。

FFMpegでSegment化

コンテンツは既に準備されているものとし、セグメント化のみ行います。

1
2
3
4
5
6
7
8
9
ffmpeg -i sample.mp4 -acodec copy -vcodec copy \
  -vbsf h264_mp4toannexb \
  -map 0 \
  -f segment \
  -segment_format mpegts \
  -segment_time 5 \
  -segment_list playlist.m3u8 \
  -segment_list_flags -cache \
  stream_%d.ts

オプションについて

  • -acodec copy -vcodec copy
    • コンテンツのコーデックをコピー。トランスコードは行われない。
  • -segment_time
    • 分割秒数の設定。5秒を設定したとしても5秒ジャストでセグメント化されるわけではない。
  • -segment_list playlist.m3u8
    • プレイリストの出力先
  • -segment_list_flags -cache
    • キャッシュ(#EXT-X-ALLOW-CACHE)の無効化。デフォルトでは有効。

iPhoneやAndroidで再生し挙動を確認をしましたが、FFMpeg内蔵のsegmenterはm3u8-segmenterより優秀ですね。

気が向いたらHLSの暗号化についても書こうかな。

参考

NginxとFFmpegを利用したHTTP Live Streaming配信

Comments