ストリーミング配信をダウンロードして何度も見たくなるときってあるよね
ということで色々やってみた結果を書き残し。
今回はHLSでのストリーミングをごにょごにょする。
ストリーミングとは?
そもそもストリーミングってなんぞ?って人はあまりこのブログ見ないかもしれないけど、まぁ極端に言うと映像とか音楽とかをインターネット上で配信するときに待ち時間が少なく再生できるってアレですね。
ファイルをまるっとダウンロードしてからじゃなく、ダウンロードしながら再生するためそれなりの通信速度さえあれば快適に見れます。
で、このストリーミング再生は大きく分けてオンデマンド(VOD)とライブの2種類があります。
オンデマンドとライブの違いって?
オンデマンド
元々あるコンテンツを細分化しておくことで、リアルタイムな再生を可能にする方法です。
5分のファイルを1分ずつに分けて、最初の1分分を再生してる間に2分目をダウンロードしておいて再生する・・・みたいな。
最近増えてるアマプラとかhuluみたいなサブスクサービスは大抵これなんでないかな、知らんけど。
ライブ
その名の通りその時の映像なんかをそのまま垂れ流すやつです。
ニコ生とかYoutubeLiveとか。
HLSとは?
HTTP Live Streamingの略。
前述のオンデマンド技術の1つで、最近流行ってきてんの?abemaでも使ってるらしいです。
Appleが作った技術らしく、オンライン上で映像配信を行うに当たりプラットフォームに依存しない配信が可能だったりする規格だそうな。
詳細は省きますが、特徴としてプレイリストファイル(m3u8ファイル)とセグメントファイル(tsファイル)で構成されてます。
で、このプレイリストファイルにはそのコンテンツに含まれるセグメントファイルのリストだったりが書かれてます。
プレイリストファイルは、同じ階層にあるファイルがそのまま記載されてたり、web上のセグメントファイルが記載されてたりします。
ならタイトルの意味は何なんだよ
って思ったでしょ?
要はMP4とかに変換してオフラインでも見たいって事なんすよ。
これ以降が本題となります。
本題
ffmpegってツールを使ってこのプレイリストファイルとセグメントファイルを1つのファイルに統合しようってお話。
- ダウンロード まずはここからダウンロードしてください。
- インストール
このツール、インストーラはないので任意のフォルダに配置し環境変数でbinフォルダにpath通しておけば終わりです。 - MP4への変換
- セキュリティ云々でエラーが発生した場合
- 音が聞こえない
- webを指してるプレイリストファイルを変換しようとしたらhttps云々で怒られた場合
- 完成
FFmpeg
基本的には以下コマンドにて変換可能です。
ffmpeg -i [m3u8ファイル名] [MP4ファイル名]
簡単に見えるけど意外と奥が深い。
とりあえず
-allowed_extensions ALL
のオプションをつけておくといい。
多分そのパターンは映像と音声が別ファイルです。
ffmpeg -i AUDIO.m3u8 -i VIDEO.m3u8 MOVIIE.mp4
みたいな感じで、iパラメータを二つ記載するとまとめて統合されます。
入力ファイルの読み込みに指定されたプロトコルが指定されてないです。
みたいな感じでプロトコル指定するとうまくいくかもです。
ね?簡単でしょ?(簡単じゃない)
ちなみにこのツール、MP4をHLSの形式に変換もできるみたいなので、配信コンテンツを作成してる人がいたら試してみるといいんじゃないですかね(他人事)