Saqoosha

2022.02.22

Diary

KlakNDI オーディオ送受信フォークと NDI Bridge の組み合わせがよろしくない問題は送信フォーマットの問題ではなく Unity から一度に送信するデータ量が少なすぎたためだったらしく DSP Buffer Size を Best performance (2048 samples) に変えたら問題解消したのだけどちょっと予想してたとおり Unity 内部でのオーディオ処理全体のレイテンシーがデカくて映像と 0.5 秒ぐらいズレてるように見えてしまってどうしたもんかなーとググってたらまたしても keijiro 神の LASP という低遅延オーディオライブラリを発見したので NdiSender に組み込んでみたらズレが解消したようにみえるのでもう少しテストして実アプリに組み込む。

2022.02.23

Diary

KlakNDI + Lasp でオーディオレイテンシー問題は解決したかに思えたのだが実アプリに組み込むと音飛びが発生して使い物にならないことがわかったけどまあなんとなくあり得るかなーとは思ってはいてやっぱりって感じでそもそも Lasp は audio reactive な映像を作るためのライブラリなので映像のフレームごとにオーディオデータを取得する仕組みになってて過負荷でフレームレートがさがるとバッファーがあふれて取りこぼしたりするんだろうなーどうすっかなーと Lasp のソースながめてたら内部で libsoundio が低遅延オーディオを担ってることがわかって直接 libsoundio をつかえばフレームレートに依存せずにオーディオ送信できそうなのでやってみたらいちおうできたっぽいのであとは実アプリに組み込んで高負荷時にどうなるかってところ。

2022.02.24

Diary

KlakNDI + libsoundio で音周りの処理を全部バックグラウンドスレッドにもってけたので高負荷時の音途切れ問題は解決したけど音ズレがあったり’なかったり全然わからんんんてなったけど NDI SDK のドキュメントみてたら Timecode とか Timestamp とか同期関連ぽいプロパティがあって KlakNDI では設定されてなかったので指定したらズレなくなったっぽい気がするけどそれよりも NDI 5 が 4 と後方互換性があって差し替えるだけでいいってので差し替えたことのほうが影響してるのやも。しかしパフォーマンスを追い求めると NDI にしても libsoundio にしても結局ネイティブに近いレイヤーまで下りないとどうにもならないので Unity やってんだかなんなんだかって感じになるな。