目がかゆい。 鼻水はほとんど出ないからいいんだけど、やっぱり目がかゆい。あと鼻もちょっとかゆい。くしゃみもちょっと出る。 どうしようもないんだけど。
本の表紙は描いてくれる人が見つかったので安心していっぱい刷れる。とはいえタイトルだの内容だのがだいぶニッチなのでそんなには大量に刷らんけど。100部も刷れば大丈夫だろう。費用は回収できない前提だ。
中身も頑張って詰めていかないと。
最新バージョンだと一部のプレイヤーで謎の調子悪さを発揮しているとの報告が前からあって、だいたいあの辺りが怪しいだろうと睨んではいるものの確証が持てずにいた。
IPv6対応が一段落したのでリリース前についに調べるかと見てみたんだが、やっぱわからん。
チャンネルから各出力ストリームにパケットを送りつけるところを非同期にした辺りが怪しいだろうと睨んでいたんだが、良く見てみてもべつにおかしくはないなぁ。でもそれ以外でそれらしい変更をしたところはない。前のバージョンだと大丈夫って話なんで、この辺りだと思うんだが。
再現させようと試してみるが、たまーにそれらしき状況は起きるものの頻繁にではないので追いづらい。またビットレートが低いと起きないのか、自分の配信では安定しちゃってる。 高ビットレートで試そうにも、作業配信しながらもう一本エンコードできるほどのマシンパワーはない……1。
なんかログ取るのにETWというのが使えるというので試してみたが、使い方がいまいちわからずに、イベントの名前なんかが上手く設定できなかったり見方が分からんとかあったので時間かかりそうなので一旦諦めた。分かれば便利そうなんでまたあとでしっかり勉強したい。
それらしいのが再現した状況では、PeerCastStation側は特になんのログも出してない状態で、プレイヤー側が不正データ検出みたいなメッセージを出して再接続に来ていた。 人為的に再現させられないかと、パケットを欠落させてみたり、パケットの順番を無理矢理入れ替えてみたりしたけど発生しない。いったいなんなんだ……。
あとはもうそれらしいところを当てずっぽうでいじって再現しなくなることを祈るしかないなぁ。 非同期にしたあたりをあらためて見てみると、ソースからチャンネルへのパケット転送を非同期にしたのはちゃんといってるが、チャンネルから各シンクへのパケット転送の非同期化は何も考えずタスクにぶん投げるだけになっていた。これだと直列化されてないので、ある転送タスクが動く前に、次の転送タスクが動いてしまってパケット順番が入れ替わりかねないな。 パケットの入れ替えは試したけど普通に動いてたと思うんだが、よろしくないことには変わりないのでちゃんと直列化しよう。
あとは思い当たるところがなかったので、これで試してくれって投げといた。手元でちょびっと試してる分には発生してないけどサンプル少ないからどうだろうなぁ。
ところでTaskの直列化ってContinueWithで連鎖させるようにしてるんだけどこれでいいんだろうか。
Task lastTask = Task.Delay(0);
void Hoge()
{
lastTask = lastTask.ContinueWith(prev => {
なんか新しい処理;
});
}
てな感じ。これで前の処理が終わってから新しい処理が動くのが保証される。
ソース追い掛けたり試した限りでは大丈夫そうだったけど、なんか無理してる感は拭えないのよな……。
今書いてて気付いたけどサーバーになってるMac miniでOBS Studio起動すればいけるわ。 ↩