2011年9月12日月曜日

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 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にアクセスして、再生出来ることを確認。

 

0 件のコメント:

コメントを投稿