HTTP Live Streaming
iPhone HTTP Streaming with FFMpeg and an Open Source Segmenterの要約です。
iPhone 3.0およびQuickTimeXに対してWebサーバからストリーミングを送信できる。HTTPプロトコル経由で送信しているため、ファイアウォールでブロックされることが少ない。
HTTP Live Streamingの規格は、拡張コメントを追加したプレイリスト(.m3u)を用いており、時間単位での再生指定があった場合にどのコンテンツファイルに飛ぶべきかが記述されている。
コンテンツファイルは、元のコンテンツファイルを分割したMPEG2-TSファイル、MPEG-2-PSファイル、オーディオストリームを使用可能。分割単位は、1ファイル当たり10秒がデフォルト。
VOD用のプレイリストの場合には、前述のプレイリストを使うこととなる。ライブストリーミング用の場合、スライドウィンドウ型のプレイリスト(例: 次のファイルが見つかると動的にリスト内容が次のファイルを含む内容に置き換わる)を使うことが可能。
MPEG2-TSファイルのビデオ/オーディオコーデックは、H.264/AACとなる。
コンテンツファイルの配置方法は、分割したコンテンツファイルとプレイリストをftp等でWebサーバにアップロードする。
iPhone 3.0およびQuickTimeXは、Webブラウザでダウンロードする操作をプレイリストを参照して連続して動作するように見せかける。
プレイリストのファイルフォーマットは、次になる。
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXTINF:10,
http://hoge/example_0001.ts
#EXTINF:10,
http://hoge/example_0002.ts
#EXTINF:10,
http://hoge/example_0003.ts
#EXTINF:10,
http://hoge/example_0004.ts
#EXTINF:10,
http://hoge/example_0005.ts
#EXT-X-ENDLIST
HTTP Live Streaming用コンテンツファイルの作成
ffmpeg を使用して、HTTP Live Streaming用コンテンツファイルを作成する。
Step 1: ffmpeg のビルド
Step 2: コンテンツファイルのエンコード
x264フォーマットでエンコードしたコンテンツファイルを作成する。
iPhoneが対応するx264フォーマットは、次になる
- 対応するビットレート: 100Kbps to 1.6Mbps
- 推奨ビットレート
- Low: 96 Kbps video, 64 Kbps audio
- Medium: 256 Kbps video, 64 Kbps audio
- High: 800 Kbps video, 64 Kbps audio
- iPhoneのスクリーンサイズ: 480x320
次のコマンドを参考に、MPEG2-TSファイルに変換する。
ffmpeg -i <in file> -f mpegts -acodec libmp3lame -ar 48000 -ab 64k -s 320x240 -vcodec libx264 -b 96k -flags +loop -cmp +chroma -partitions +parti4x4+partp8x8+partb8x8 -subq 5 -trellis 1 -refs 1 -coder 0 -me_range 16 -keyint_min 25 -sc_threshold 40 -i_qfactor 0.71 -bt 200k -maxrate 96k -bufsize 96k -rc_eq 'blurCplx^(1-qComp)' -qcomp 0.6 -qmin 10 -qmax 51 -qdiff 4 -level 30 -aspect 320:240 -g 30 -async 2 <output file>
Step 3: segmenterのダウンロード
http://svn.assembla.com/svn/legend/segmenter/ からsegmenterのソース一式をダウンロード。
mkdir segmenter cd segmenter wget http://svn.assembla.com/svn/legend/segmenter/COPYING wget http://svn.assembla.com/svn/legend/segmenter/Makefile wget http://svn.assembla.com/svn/legend/segmenter/segmenter.c make
次のコマンドを参考に、MPEG2-TSファイルを分割する。
segmenter
Step 5: Test the stream
テスト用にHTML5のvideoタグを使用したhtmlファイルを作成する。
Video Test
iPhoneで、http://www.myhost/videos/stream-128k.htmlにアクセスして、再生出来ることを確認。