では、実際に改造していくことにします。
とりあえず、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 件のコメント:
コメントを投稿