2012年11月23日金曜日

Flazrの配信をいじってみたいと思う。

では、実際に改造していくことにします。

とりあえず、ReadableByteChannelをつかってSystem.inのデータを取得していくというプログラムをつくるのだが、はじめからSystem.inをつかっているとデバッグがしにくいのでとりあえず、FileChannel経由でファイルのデータを取得するプログラムをつくることにします。

もともと、ファイルの時間を指定してデータを抜き出すことができなくなるので心配していたFlvLiveReader.next()の動作も、LInkedBlockingQueue.take()をつかってデータが到達するまで処理を止めることにしました。

https://github.com/taktod/stdinFlazr/commit/a429295bbaf0b01c8f0e1aeeb659849f93989a5c
で、できたのがこちらのコード
いまのところrtmpPublisherをいじったりはしていないので、ClientHandlerEx、ClientPipelineFactoryEx、RtmpPublisherEx等は利用していない形になっています。

実際に放送を流してみたところ、たまーにちょっとwaitが入る感じになりました。
たぶんLinkedBlockingQueueによるwait時間分とrtmpPublisherが管理している再生時間とのずれがおこって、そのデータ待ち分だけ中途でとまるといったことがおこるのでしょう。

んで、FileChannel経由をやめて、System.inから取り出すプログラムも組んでみた。
https://github.com/taktod/stdinFlazr/commit/385ea597bdc7849f02ab8e42258c060fc5c20a3a

実際にflvファイルをcatしてからpipeでつないで放送させてみたところきちんと動作しました。

僕としては、これで一段落したつもりです。
あとやることとしては
・役割ごとに動作を変更していって、クラスの整備をする。
・実際にリアルタイム出力をつかってながせるかやってみる。
・rtmpPublisherをいじって動作を安定させる
ということがあるのですが、とりあえずパイプ接続のデータをrtmpでpublishするという件の調査はできたので、もういいかなと思っています。

0 件のコメント:

コメントを投稿