 
				
				
				
			昨今ではWebサイト上で動画を再生させることも少なくないですが、通信速度に合わせて遅延なくHTTPプロトコルで送信できるHLSによる動画配信をしてみましたので、手順をまとめておきます。
今回の技術は主にWebサイト上の背景を動画にしたりする用途で等で使えます。
目次
環境・前提条件・使用技術など
- CentoOS7.6
- Apache2.4
- Python3.6
今回は、上記の環境が準備済みの状況から始めます。
Pythonのインストールは以下の記事を参考にしてください。
環境確認
| 1 2 3 4 5 6 7 8 | $ cat /etc/redhat-release  CentOS Linux release 7.6.1810 (Core)  # apachectl -V Server version: Apache/2.4.28 (Unix) $ python3.6 --version Python 3.6.8 | 
HLS形式とは?
HLS形式は、米アップルによって開発された、動画をストリーミング送信するためのプロトコルの1つで、HTTPライブストリーミングを意味する英語「HTTP Live Streaming」の略から来ています。
元動画を細切れにした「MPEG-2 TS」ファイルの再生順や、暗号化の鍵、コンテンツのバリエーションなどを書き込んだM3U8形式の「プレイリスト」に記載しておきます。
これらのファイルをWebサーバーから順次配信することで、ネット環境に応じて低ビットレートでも再生しやすくなっています。
HLS形式についての詳細は以下などをご覧下さい。
https://k-tai.watch.impress.co.jp/docs/column/keyword/515059.html
今回の設定手順
- ffmpegのインストール
- 配信したいmp4動画をffmpegでM3U8形式に分割
- video.jsの設置
ffmpegのインストール
まず、配信したい動画(mp4形式)を分割するためのツールffmpegをインストールします。
インストール手順は以下で紹介されていたものを参考にさせて頂きました。
https://fukatsu.tech/centos-ffmpeg
Nuxリポジトリを追加
NuxリポジトリはEPELリポジトリに依存しているので、EPELリポジトリが有効になっていない時は、以下のように有効化します。
| 1 | $ sudo yum install epel-release | 
Nuxリポジトリを有効化
Nuxリポジトリを有効にしてGPGキーをインポートします。
| 1 2 | $ sudo rpm -v --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro $ sudo rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-5.el7.nux.noarch.rpm | 
yumでインストール
リポジトリが有効になったら、FFmpegをインストールします。
| 1 | $ sudo yum -y install ffmpeg ffmpeg-devel | 
インストール・バージョンの確認
| 1 2 3 4 5 6 7 8 9 10 11 12 13 | $ ffmpeg -version ffmpeg version 2.8.15 Copyright (c) 2000-2018 the FFmpeg developers built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-36) configuration: --prefix=/usr --bindir=/usr/bin --datadir=/usr/share/ffmpeg --incdir=/usr/include/ffmpeg --libdir=/usr/lib64 --mandir=/usr/share/man --arch=x86_64 --optflags='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic' --extra-ldflags='-Wl,-z,relro ' --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libvo-amrwbenc --enable-version3 --enable-bzlib --disable-crystalhd --enable-gnutls --enable-ladspa --enable-libass --enable-libcdio --enable-libdc1394 --enable-libfdk-aac --enable-nonfree --disable-indev=jack --enable-libfreetype --enable-libgsm --enable-libmp3lame --enable-openal --enable-libopenjpeg --enable-libopus --enable-libpulse --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libvorbis --enable-libv4l2 --enable-libx264 --enable-libx265 --enable-libxvid --enable-x11grab --enable-avfilter --enable-avresample --enable-postproc --enable-pthreads --disable-static --enable-shared --enable-gpl --disable-debug --disable-stripping --shlibdir=/usr/lib64 --enable-runtime-cpudetect libavutil      54. 31.100 / 54. 31.100 libavcodec     56. 60.100 / 56. 60.100 libavformat    56. 40.101 / 56. 40.101 libavdevice    56.  4.100 / 56.  4.100 libavfilter     5. 40.101 /  5. 40.101 libavresample   2.  1.  0 /  2.  1.  0 libswscale      3.  1.101 /  3.  1.101 libswresample   1.  2.101 /  1.  2.101 libpostproc    53.  3.100 / 53.  3.100 | 
以上でffmpegのインストールは完了です。
配信したいmp4動画をffmpegでM3U8形式に分割
ffmpegのインストールが完了したら、ffmpegを使ってmp4形式の動画をM3U8形式に分割します。
以下のサイトを参考に、m3u8 と ts を作るところまで実施します。
https://k-tai.watch.impress.co.jp/docs/column/keyword/515059.html
インストールもそうなのですが、内容は上記サイトをほぼそのままなので割愛します。
“HLSの録画”という部分は今回の対象外なので”HLSの作成”というところだけ実施し、M3U8形式のファイル作成まで実施しました。
video.jsの活用

一応、ここまでで作成したM3U8形式の動画をHTML上のvideoタグで指定すれば再生はされます。
しかしながら、HLSは先述の通り、米アップル社によって開発されたプロトコルなので、ブラウザによって再生出来るものと出来ないものがあります。
具体的には、EdgeやSafariでは再生出来ますが、ChromeやFirefoxではネイティブでは再生できません。
そこで、ChromeやFirefoxでも再生できるようにするにvideo.jsというライブラリを活用します。
video.jsはバージョンによって設定が少し異なるようです。以前は複数のJSファイルの設置が必要だったようですが、最新版ではvideo.jsだけの読み込みで可能となっています。
video.jsは以下GitHubより最新版をダウンロードしてください。
video.jsを任意のディレクトリに設置し、HTML上から指定すると以下のような形になります。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <html>   <head>     ...     <link href="[任意URL]/video-js.css" rel="stylesheet">   </head>   <body>     <video-js id=example-video class="vjs-default-skin covervid-video" data-setup='{"fluid": true}' muted autoplay loop>       <source src="[任意URL]/hls/playlist.m3u8" type="application/x-mpegURL">     </video-js>     <script src="[任意URL]/video.min.js"></script>     <script>       var player = videojs('example-video');     </script>   </body> </html> | 
[任意URL]の部分は各環境に合わせてください。
今回はWEBサイトの背景用なので(上記サンプルは背景指定ではありません)、video-jsタグのオプションは横幅をブラウザサイズとし、自動・ループ再生でChromeやFirefoxでも再生できる指定です。
video.jsの設定方法はチュートリアルをご覧下さい。
一応、こちらの設定で意図通りHLSの分割読込形式でWEBサイトの背景の動画再生ができました。
画像では数回目のアクセスなのでdisk cacheになっていますが、chromeでも再生可能でした。





