ストリーミングのためには、ストリーミングのための形式に動画の変換が必要。
変換に使えるツールと、再生用のライブラリを見つけたので、やってみる。
目次
参考
- FFmpeg Builds
- 新卒エンジニアの開発日記 - FFmpeg で動画変換!各 OS ごとのインストール方法と使い方まとめ
- qiita - ffmpeg で MP4 ファイルを HLS AES-128 ストリーミング用のファイルに変換する
- JWS - mp4 を変換して hls ストリーミング再生を実装してみる
- blog.foresta.me - ffmpeg を使って mp4 を HLS に変換する
- qiita - AWS+Video.js でお手軽ストリーミング動画配信
ffmpeg の導入
mp4 からストリーミングのための.m3u8
を作成するための、ffmpegを導入します。
導入については、新卒エンジニアの開発日記 - FFmpeg で動画変換!各 OS ごとのインストール方法と使い方まとめでまとめられているとおりです。
こちらの windows 環境向けを参考にして導入しました。
準備(windows 環境)
ffmpeg の導入ができたら、サーバーを用意します。
任意のディレクトリで、以下を入力してゆきます。
1 | npm init -y |
これができたら、public\viddeo
の中に動画の元データを置いてあげます。
今回は、input.mp4 とします。
以下のコマンドを用いて、.m3u8
ファイルと.ts
ファイルを作成します。
1 | ffmpeg -i public\video\input.mp4 -codec copy -map 0 -f segment -vbsf h264_mp4toannexb -segment_format mpegts -segment_time 5 -segment_list public\video\output.m3u8 public\video\output-%03d.ts |
このコマンドは、- mp4 を変換して hls ストリーミング再生を実装してみるを参考にしました。
実行により、以下のファイルが作成されました。
1 | output-000.ts |
表示するページの作成
以下のようにpublic/index.html
を作成します。
1 | <html> |
video タグにサンプルを参考にclass="video-js vjs-default-skin vjs-big-play-centered"
を割り当てています。
こちらの中で、class=”video-js”は必須でした。動画プレーヤーの UI が画面上に広がってしまう状況になりました。
サンプルでは flash へのオプション設定も行っていましたが、html5 だけにしました。
確認
npx http-server
でサーバーを起動します。
起動出来たら、localhost:8080
にアクセスします。
アクセスした様子は以下の通り。
poster="poster.png"
を割り当てたので、再生前は「動画」と書かれた画像が表示され、再生ボタンを押すと表示が始まります。player.play();
を行っているので、自動再生が基本ですが、私は自動再生を禁止するアドオンを Chrome に入れているので自動再生されません。
アドオンを入れていない Edge などでは、自動再生します。
Chrome でも一度再生ボタンを押した後のリロードでは自動再生します。
再生している動画は、SAKURAさんで公開されているフリー素材を使用しています。
今回は mp4 をストリーミング用にファイルを変換して、ストリーミング再生する WEB ページを作ってみました。
ffmpeg ですが、mp4 から gif 画像も作れたりと面白いツールだと感じました。(まだ全然使いこなせていませんが)。
10 秒前後のサンプル動画なので、問題ありませんが、長い動画になるほどストリーミングにする意義が出てくるはずです。
動画をアップロードして、別タスクで ffmpeg を用いて変換し、配信するといったことができそうです。
ではでは。