PeercastStationでFLVのH.264配信する
次期PeercastであるPeercastStationはwmv形式の他に、新たにflvとmkvの配信にも対応しています。mkvの方は以前誰かがやっていたので、flv配信をしてみたいと思います。flvの配信はffmpegをGUIから利用できるようにしたFFMPEGLauncherと、専用の独自ストリーミングサーバを使います。
なぜ独自サーバなのか?
PeercastStationのflv配信は擬似ストリーミングと呼ばれるもの(プログレッシブダウンロードとも言います)で、一般的なflashのライブ配信のようなrtmpプロトコルを使ったものではありません。そのため(PeercastStationがrtmpに対応すれば別ですが)FlashMediaLiveEncoderやXSplit、FlashMediaServer、Red5といった既存のflashライブエンコーダ/サーバ郡は選択肢から外れます。
もしflvの「ファイル」を入力として配信するなら普通のhttpサーバを利用することができます。しかしカメラの映像やデスクトップを配信しようとすると、httpサーバはエンコード中(書き込み中)のファイルを送信できないのでこの方法は使えません。
そこでどうするかというと、幸いにもffmpegにはエンコードしたデータを保存する代わりに外部に送信(HTTP POST)する機能があるので、これを利用します。ffmpegが送信したデータを受信しつつ、それをhttpで逐次出力する機能を持ったサーバを作成することでPeercastStationでflv配信ができるようになります。(他にも例えばファイル出力をパイプして入力として受け取る方法もあります)
ちなみにこの独自サーバはffserverと同じことをしているのでffserverがあればこの独自サーバを使う必要はありません。しかしffserverのwindowsバイナリというのは配布されていないようです。
以前の記事を読んだ人ならこの説明に見覚えがあるかと思います。この独自サーバというのは、「androidでピアキャス配信するアプリを作る」で作成したストリーミングサーバFFWmeServer.jarのflv版です。
さて前置きが長くなってしまいましたがいよいよ本題
PeercastStationでflv配信する方法
FFMPEGLauncherの使い方については詳しい説明サイトがたくさんあるので省略。PeercastStationでflv配信するときの設定は例えば以下のようになります。
可変ビットレート(VBR)にするとPeercastStationでの表示上のビットレートはビデオが0kpbsとなりオーディオ分のみになります。
キーフレームの間隔は-x264optsのkeyintで指定できます。基本的にはフレームレートの10倍にするものらしい。この値を小さくすると受信開始から画面が表示されるまでの時間が短くなる代わりに画質が下がります。
配信先のFFFlvServerというのが今回作成した独自サーバです。
エンコードを開始する前にサーバを起動しておきます。FFFlvServer.jarをダウンロードし、コマンドプロンプトで実行
java -jar FFFlvServer.jar 8080
FFMPEGLauncherの配信開始ボタンを押すとコマンドプロンプトに文字がずらずらと表示されます。これでPeercastStationで配信する準備ができました。PeercastStationの配信画面を開き、配信を開始します。
視聴方法
wmpはflvを再生できないのでffmpegに付属しているffplayなどflvの再生に対応したプレーヤーを使います。
ffplay http://localhost:7144/stream/41b7622573028ffcc9101f06c8c66d9b.flv
あるいはflowplayerなどのflashプレーヤーをPeercastStationのhtmlフォルダに置いて再生することもできます。
flowplayerにストリームurlを渡す方法は要検討。いまのところ
http://127.0.0.1:7144/html/flowplayer/#41B7622573028FFCC9101F06C8C66D9B
のようなアドレスを直接入力しています。このflowplayerを使ったサンプルはこちら。PeercastStationのhtmlフォルダに入れてください。
最後に
08/20現在公開されているPeercastStation1.4.2はflvのh.264配信をリレーできますが視聴はできません。今回のテストではソースを修正した改造版を使いました。この修正はPeercastStationのgithubですでに反映されているので次回1.4.3のアップデートで対応されると思います。
09/07追記
PeercastStation1.5.0でflvのh.264配信ができるようになりました。
(配信者が1.5.0であればリスナー側は1.4.2でも視聴できるようです)
flv配信終了時にPeercastStationが落ちるのはもしかしてFFFlvServerが原因かもしれないので修正版をアップしました。
60fpsでもたぶんできるようになりました。
FFFlvServerを更新し、
FFMPEGLauncherでH264_60FPS配信をしたときに、
数分するとPeerCastStation1.5.0の接続一覧のHTTP Source ConnectedがErrorになりました。
FFFlvServerのコンソールログでは、
http close:Socket[addr=/127.0.0.1,port=58213,localport=8080]が表示されました。
H264_45FPSに落としたらHTTP closeが表示されなかったので、
FFFlvServerの処理が間に合っていないかも知れません。
60fpsで配信が終了するのを確認しました。パケット毎に出力するとオーバーヘッドが大きく転送が間に合わないようです。バッファするようにしたほうは切れずに動作するようになったかも。
FFFlvServerを更新し、
FFMPEGLauncherでH264_60FPS配信を、
再度試したところエラーが表示されませんでした。
動作報告ありがとうございました
FFFlvServerを更新し、PeerCastStation1.5.0でH.264配信して配信終了しても、
リスナー側のPeerCastStationは落ちなかったようです。