作業は進みつつある。
先週木曜は休みにして、以前行ったところとはまた別の近くの図書館に行って本書いてた。こっちの方が近い気がしてたけどどっちもどっちか。 こっちは平日なこともあってか、それともPC使える席が隔離部屋なこともあってか少し静かで良かった。WiFiは無いのでテザリングで使ってたけど度々通信が詰まってしまうのが困ったところ。
内容はたぶん2/3くらいまで進んだような?まだ適当に書いてるだけなのであとで全部見直すとだいぶ修正は入るだろうけど、まあまだ時間はある。はずだ……。 今のところざっと30Pは越えてるのでこのペースだと50P前後くらいか?30ページじゃ収まりそうにはないけど100ページも書けるわけないしせいぜい50ページくらい?と思ってたんで、予想通りくらいのページ数になりそうだな。 今月中に一通り文章書き終えて、来月は編集と図を入れたりしたいなぁ。
FLV→MPEG-2 TSの変換も進みつつある。といってももう半年近くやってる気もするが……。
RubyからC#へ移植してPeerCastStationのソースにぶっこむことはできた。まだファイル→ファイルへの変換をしただけなのでネットワークでリアルタイム変換までは漕ぎ着けてない。
途中で作ったファイルが上手く再生できないことに気付いたんだけど、NALByteStreamの読み込みに余計な脱エスケープ処理が入ってたのが原因だった。[0,0,3]
が来たら最後の3はデコード時に無視しろってので消してたんだが、デコード時に無視なのでコンテナいじる程度ではそのままにしとくのが正しそうだ。しかしRuby版では上手く動いてたのなんでだろうな。コードは同じように見えるんだが。まあどっちにしろ余計なので消しといた。
次はコンテナ変換しつつ視聴するための口を作らねばならん。 まずは変換せずにそのままスルーパスするだけのフィルタを作って適用できるようにしましょうね。
データ読み込んでバッファにつっこむ辺りはIContentSinkてなインターフェースを使うようになってるんだが、バッファから視聴用にデータ取ってくる辺りはイベントを使うようになってておかしいので変えたいなぁ。バッファに非同期で追加されるコンテンツを順次取り出すのでIEnumerableのMoveNextがTaskを返せばいい?やってみようとしたがしっくりこない。これはもしかしてRx.NETの出番では?と思って調べてみるがそうでもないな。IContentSinkがだいたいRx.NETみたいなことやってた。
IAsyncEnumerableてのが似たようなのでIx.NETというのに入ってるようだ。これじゃんと思ったがSystem.Interactive.Asyncてのはインターフェースと拡張メソッドの実装だけで中身は自分で実装か。まあそりゃそうよね。 で、よく考えたらあんまり使うところないし、使うところでは同じようなの既に自分で実装してたので当面いらないのであった。無駄にいろいろ悩んだわ。
とにかく上流から受け取ってきたデータをバッファにつっこむところだけでなく、バッファから下流に流すところもIContentSink経由で行えるようにした。フィルタはIContentSinkを実装してデータを受け取って、下流のIContentSinkに流すものとすればいいだろう。した。
あとはHTTP視聴のところでフィルタかませるようにして動かしてみたらあっさりできた。よしよし。まあ仕組みは難しくないもんな。一発で動くとは思わんかったけど。 最後にFLV→MPEG2-TS変換のフィルタを作れば完成だけど、夜遅くなったのでこれはまだ作れてない。たぶんそんなに難しくはないだろう。
ぼちぼちHTTP Live Streamingの仕様も調べてるけど、ファイル細切れになるのはめんどくさそうだなぁ……。