HTTP Live Streaming(encrypt)のやり方を以下にメモしときます。
・用意したもの
■Linuxマシン(x86)Cent4.5
もりぞー実験マシン1号機なので色々ミドル入ってるけど
何入れたか記憶にないので足りなかったら自分で入れてくれ。
■iPhone3G
お金がないから3Gです。4G予約したのにまだこないです。
・資料
■AppleLiveStreamingOverview
■HTTP Live Streaming(draft-pantos-http-live-streaming-01)
■How to create On-Demand HTTP Stream for iPhone
・手順(適当なので適当にやろう)
まずffmpegがいるそうなのでlinuxにぶち込む。
mp3が使えるようにlame入れる。
wget http://sourceforge.net/projects/lame/files/lame/3.98.4/lame-3.98.4.tar.gz/download
tar zxf lame-3.98.4.tar.gz
cd lame-3.98.4
configure
make
install
x264を入れようとしたらyasmがないと怒られる。
yasmを入れる。yumで入れようとしたらそんなものはないと言われた。何故!?
wget 'http://www.tortall.net/projects/yasm/releases/yasm-0.6.2.tar.gz'
tar zxf yasm-0.6.2.tar.gz
cd yasm-0.6.2
LDFLAGS="-L/usr/local/lib64 -L/usr/lib64 -L/lib64" ./configure --prefix=/usr/local/stow/yasm-0.6.2 --libdir=/usr/local/stow/yasm-0.6.2/lib64
make
make install
再度x264トライするがyasmがないと怒られる。
( ̄д ̄)
which yasm ない!
/usr/local/stow/yasm-0.6.2/bin/yasm を /usr/bin /usr/local/bin あたりに
シンボリックしてみる。
あ、configure通った。wget ftp://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20100621-2245.tar.bz2
tar xjvf x264-snapshot-20100621-2245.tar.bz2
cd x264-snapshot-20100621-2245
./configure --disable-asm
make
make install
ffmpegインスコ。
tar zxf ffmpeg-0.5.2.tar.gz
cd ffmpeg-0.5.2
./configure --prefix=/usr/local --enable-libmp3lame --enable-encoder=swf --enable-shared --disable-demuxer=v4l --disable-demuxer=v4l2 --enable-libx264 --enable-gpl
make
install
vi /etc/ld.so.conf.d/ffmpeg.conf
~~
/etc/ld.so.conf.d
~~
ldconfig
iPhone用の動画ffmpegでtsファイルへ変換
ffmpeg -i testdouga.mp4 -re -f mpegts -acodec libmp3lame -ar 44100 -ab 128k -ac 2 -s 320X180 -vcodec libx264 -b 300k -flags +loop -cmp +chroma -subq 5 -trellis 1 -refs 1 -coder 0 -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -bt 300k -maxrate 500k -bufsize 500k -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 30 -g 30 -async 2 movie-ts0000.ts
Segmenter というソフトを入れる。
http://svn.assembla.com/svn/legend/segmenter/
ソースしかないので自分でコンパイル。
Segmenter で分解。
segmenter [input MPEG-TS file] [segment duration in seconds] [output MPEG-TS file prefix] [output m3u8 index file] [http prefix]
Ex:./segmenter movie-ts0000.ts 9 test test.m3u8 http://www.dimage.co.jp/ipon/
この時点で
test.m3u8
movie-ts0000.ts
movie-ts0001.ts
movie-ts0002.ts
・・・・
ができる。
Apache設定
Apacheのmime.types に追加
application/x-mpegURL m3u8
video/MP2T ts
confに追加
AddType application/x-mpegURL .m3u8
AddType video/MP2T .ts
test.m3u8で指定されたurlへ適切にアップすれば非暗号化された
HTTP Streamingができてる。はず。いやできた。
んで暗号化してみる。
まずキー作成する。以下key.txtというキーファイルを作るシェル。
#/bin/sh
keyFile="key.txt"
openssl rand 16 > $keyFile
movieを暗号化するシェル。
#/bin/sh
hexKey=$(cat key.txt | hexdump -e '16/1 "%02x"')
hexIV='0'
openssl aes-128-cbc -e -in $1 -out $2 -p -nosalt -iv ${hexIV} -K ${hexKey}
test.m3u8にキーのURLを埋め込む。
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-KEY:METHOD=AES-128,URI="https://www.dimage.co.jp/iphどっか/key.txt"
#EXTINF:10,
http://www.dimage.co.jp/iphoなんか
~~省略
#EXT-X-ENDLIST
でiPhoneで再生する。で暗号化された状態で再生される。(されてると思う)
10秒分割だとうまくいくんだが9秒分割だと調子悪い。
謎。まぁフリーでやるにも色々限界が(言い訳)ということにしておこう。
一応iOS3、4で再生できますた。
DRM?的な使い方できるのかしらねぇ・・・。
ある会社はやってるみたいですが。
(行間多い説明ですがそこは気合で)