2011年10月27日木曜日

rtmfpで高画質配信をやってみたい。

rtmfpのサーバーがオープンソースできてしまった上に、放送の実装ができてしまったので、せっかくなので高画質配信をやってみたいと思います。
NetStreamには任意のFLVのデータをappendBytesで追加していってやると動画に変換して放送するという超便利な動作があるので、これを利用してやってみようと思います。
概念的にはこんな感じ。

flvデータをrtmfpで共有してどうこうするというのは、こちらの記事にあります。
オブジェクトデータにして、byteArrayのデータをNetGroupで共有する。
そんな感じの動作です。

FMEやXSplitによる配信データをflvのデータにリアルタイムで変換するというのは、探しても記事がなかったので独自に作成しました。
とりあえずRed5でプログラムをごりごりと書きました。ソースコードは後日githubにあげる予定。
動作概念としては
■サーバー側
1:放送のストリームにstreamListenerをくっつけてパケット情報を監視する。
2:メタデータを受け取った場合はそれを保持しておく。
3:一番はじめのビデオデータ(フレームデータ)を保持しておく。(H.264キーフレーム対策)
4:再生させたい端末(クライアント)がアクセスしてきたら
FLVヘッダ(固定)、メタデータ、フレームデータを送信する。
5:その後は送られてきたパケットデータをクライアントに随時送信する。
で、OK
注意点としては、配信ソフトにはパケットデータを返さないこと(処理量が増えて重くなる。)

■クライアント側
1:NetStream.appendBytesを実行するための準備をおこなっておく。
NetStreamAppendBytesAction.ResetBeginも先に実行してOK。
2:FLVヘッダ、メタデータ、フレームデータ(始めのフレーム)は即netStreamに流してOK
3:しかるべきタイミングでパケットデータをnetStreamに流していく。
H.264の場合、キーフレームを1番はじめにしないとだめ。
H.263やVP6の場合、そのまま流してOK

複数のrtmfpのネットワークに所属するノードがいれば、別のネットワークに又投げしたりできるので、かなり大人数の配信が可能になると思われる。(実質無制限?)

うぉーなんかわくわくしてきましたw。

0 件のコメント:

コメントを投稿