Hatena::ブログ(Diary)

にゃんだふる日記

2010-02-02

[] HTTP Live Streaming 22:32

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 1: Grab the latest version of FFMpegを参照のこと。

Step 2: コンテンツファイルのエンコード

x264フォーマットでエンコードしたコンテンツファイルを作成する。

iPhoneが対応するx264フォーマットは、次になる

  • 対応するビットレート: 100Kbps to 1.6Mbps
  • 推奨ビットレート
    1. Low: 96 Kbps video, 64 Kbps audio
    2. Medium: 256 Kbps video, 64 Kbps audio
    3. 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 <segment duration in seconds> <output MPEG-TS file prefix> <output m3u8 index file> <http prefix>

segmenter sample_low.ts 10 sample_low stream_low.m3u8 http://www.myhost/videos/

Step 4: Apacheの設定

httpd.confに、次の設定を追加する。

AddType application/x-mpegURL .m3u8

AddType video/MP2T .ts

Step 5: Test the stream

テスト用にHTML5のvideoタグを使用したhtmlファイルを作成する。

<html>

<head>

<title>Video Test</title>

</head>

<body style="background-color:#FFFFFF; ">

<video width='150' height='150' src="stream-128k.m3u8" />

</body>

</html>


iPhoneで、http://www.myhost/videos/stream-128k.htmlにアクセスして、再生出来ることを確認。

参照