Encrypted Http Live Streaming
自社サイトでiPhone向け動画を配信するにあたり、採用した手法です。
- 参考
HTTP Live Streaming(Encrypt)
ここが詳しいですが、暗号化するとうまく再生できないのでアレンジしています。
iPhone, iPad, iPod – HTTP Live Streaming (HLS) with free tools on Windows
エンコードのオプション等が参考になります。
- 方針
元動画
↓
mpeg2ts
↓
分割
↓
暗号化
↓
再生
- プラットフォーム
Ubuntu 12.04
ffmpeg は apt-get でインストール。
mpeg2ts化して分割 [code light=“true”] ffmpeg -i ./hoge.3gp -f segment -segment_time 10 -segment_list hoge.m3u8 -segment_format mpegts -vcodec libx264 -vbsf h264_mp4toannexb -flags -global_header -r 30 -s 640x480 -qmax 51 -b 300k -g 150 -qcomp 0.7 -qmin 10 -qdiff 4 -subq 6 -me_range 16 -i_qfactor 0.714286 -acodec libmp3lame -ar 48000 -ab 64k -g 30 hoge%05d.ts [/code]
ポイント
-g に フレームレートと同じ値(整数)を指定する。これにより、IDR-Frameがセグメント化された各ファイルの先頭に挿入される。
これをやらないと、暗号化した場合、正常に再生できない。 (暗号化しない場合は、なぜか問題なく再生できる)暗号化 キーを作成する
[code lang=“shell” light=“true”] #/bin/sh keyFile=“key.txt” openssl rand 16 > $keyFile [/code]
暗号化する
crypt.sh
[code lang=“shell” light=“true”] #/bin/sh hexKey=$(cat $4 | hexdump -e ‘16/1 “%02x”’) hexIV=`printf ‘%032x’ $3` openssl aes-128-cbc -e -in $1 -out $2 -p -nosalt -iv ${hexIV} -K ${hexKey} [/code] crypt.sh [対象ファイル] [出力先] [連番] [鍵]
ポイント
iv に連番を指定しないとiPhone側での復号がうまくいかず、正常に再生されない。
プレイリスト(m3u8)を作成
[code light=“true”] #EXTM3U #EXT-X-TARGETDURATION:10 #EXT-X-KEY:METHOD=AES-128,URI=“https://[鍵の格納場所]” #EXTINF:10, http://[tsファイルの格納場所] #EXTINF:10, http://[tsファイルの格納場所] . . #EXT-X-ENDLIST [/code]
20. 再生
Apache設定
Apacheのmime.types に追加
[code light=“true”] application/x-mpegURL m3u8 video/MP2T ts [/code]
confに追加 [code light=“true”] AddType application/x-mpegURL .m3u8 AddType video/MP2T .ts [/code] 再生ページ
videoタグで配信
[code lang=“html” light=“true”] [/code]