RTMPのライブストリーミングをRTMFPでリレーする実験
flashの動画配信をする上で回線容量を考える必要のないRTMFPはとても便利です。しかしいまいちな点が2つ。
- NATが越えられない環境では接続できない
- RTMFPに対応したフリーのRTMPサーバがない
RTMPとRTMFPを相互変換できたらそれが一番なのですがRTMFPは仕様も公開されておらず無理っぽい。いろいろ考えた結果RTMPのパケットデータをRTMFPで送信し、再生するときに再びRTMPに戻せるか試すことにしました。目標はRTMPでP2Pを構成することだったのでJavaでもよかったけど、最も有名であろうP2Pライブラリは癖がありそうなのと動画用として使えるのかわからなかったため結局RTMFPを選択しました。これなら経路最適化も自動でやってくれて手間が省けます。
具体的にはRTMPサーバに偽装した実験サーバ(以下Z5)がFMEから受け取った動画のパケットデータをNetStream.sendでマルチキャストし、ネットワーク越しの別のZ5がローカルRTMPサーバとなって受信したデータをプレーヤーへ流します。この動作を図にしたものが以下
RTMFPができないときは、ポートが開いているZ5にRTMP接続することで視聴できます。元々peercastでflashをリレーすることは可能か?という疑問から始まった企画で、ダイレクト接続可能なpeercastをイメージしてもらえばよいかと思います。
RTMPサーバの部分はかなり無理やり実装したので、flashやFMEのバージョンが変わったりすると動作しなくなる可能性大。
Z5既知の問題
- RTMPの仕様をよく分かっていない
- H.264に対応していない
- ビットレートが高いとだんだん遅れる
- RTMP接続でZ5がフリーズすることがある
ダウンロード:Z5_alpha.zip