Transiruの音声配信技術についての講評

とりあえずTansiru(https://www.transiru.net/)をサービスリリースしてみたら、技術面でアドバイスしてもらえたので整理。
4
てるろー @terurou

Transiru、技術面はわかる人が見たらすぐに判っちゃうので先に書いておくと、Haxe/JavaScript, Scala, WebAudio, MQTT orver WebSocket, VerneMQみたいな感じです transiru.net

2016-01-13 16:00:42
V @voluntas

Transiru transiru.net 音声配信を TCP に乗せたのか。輻輳あったときどうなるのか凄い気になる。

2016-01-13 16:24:25
てるろー @terurou

@voluntas 将来的にはWebRTCも含めプロトコルの置き換えは検討してます。現時点ではかなり素朴な実装ですね。とりあえず公開することを優先して、だいぶ割り切ってます

2016-01-13 16:29:24
V @voluntas

@terurou WebRTC で音声だけはかなりおすすめです。P2P でも相当な数裁けるので。映像絡むと死が待ってます。

2016-01-13 16:31:21
V @voluntas

音声は何も難しくないんだよなーパケロスしてもどうでもいいし。ばんばん投げればいいだけ。問題は映像なんだよな。。

2016-01-13 16:32:05
てるろー @terurou

@voluntas うちはあまり知見がないので、御社に技術相談すればよさそうですね。実際、MQTTで作ったはいいんですが、他にも問題は見えてるので、近いうちにご相談することになるかもしれないです

2016-01-13 16:35:33
V @voluntas

@terurou いや、音声配信だけは凄い簡単です。js でさくっと出来ますよ。うちのはサーバ経由という面倒なことをやってるだけなので。それも映像がーってだけなので。音声だけであれば転送量問題とかも全部解決します。イイ選択だと思います。

2016-01-13 16:36:54
てるろー @terurou

@voluntas なるほど、面倒だという印象があったので後回しになってたんですが、優先度上げて調査してみます

2016-01-13 16:39:36
V @voluntas

@terurou SkyWay とかで逃げちゃえば凄い楽ですよ。P2P であればサーバコストもかからないですし。まさにこのための WebRTC って感じですね。うちは真逆で P2P では無理なところやってる感じです。

2016-01-13 16:55:33
V @voluntas

@terurou ちなみに P2P だと 1:20 くらいが最大だとおもいます。CPU 的に。

2016-01-13 17:01:41
てるろー @terurou

@voluntas やっぱ、1:20ぐらいになんですね。それだと全然規模が足りなくて、1:10Kぐらいの配信は最低限の目標としてるので、このあたりの配信制御が簡単にいくならWebRTCで良いのですが

2016-01-13 17:13:50
V @voluntas

@terurou 1:1000 だと WebRTC だとサーバ経由しないとダメですね。もしくはFlash Media Server を用意するしかないですね。遅延なし(RTC) 系の配信は鬼門しかないです。

2016-01-13 17:15:19
V @voluntas

@terurou 遅延ほぼなしリアルタイム配信は技術的に今のところニコニコ動画が最先端ですね … 。ほとんどの場合は遅延ありでやってるとおもいます。うちは映像込みだと 1:600 が限界ですね。

2016-01-13 17:16:50
てるろー @terurou

@voluntas FMSを使いたくない→WebRTCで配信制御大変そう→とりあえずMQTTでリレーさせるかみたいな状況になってます。あと、遅延なしまでやるとコストが跳ね上がっちゃうので、10秒程度の遅延が実現できれば十分でしょという考え方をしてます

2016-01-13 17:18:36
てるろー @terurou

@voluntas 映像込みで1:600はすごいですね…

2016-01-13 17:20:24
V @voluntas

@terurou MQTT でリレーで十分かもしれないですね。ただ TCP + 音声はあまり現実的では無いとは思います。10 秒程度許容できるなら play list 方式でサーバにアップロードしてそれをポーリングしてダウンロードする HLS っぽいほうがイイと思います。

2016-01-13 17:20:44
V @voluntas

@terurou broker いらなくなりますよ。遅延おkの大規模配信はほとんど HLS (サーバに一度置いてプレイリストによる分割)方式が基本です。配信はセッションがボトルネックになっていくので難しいと思います。

2016-01-13 17:21:29
V @voluntas

@terurou 完全に CPU 問題です。暗号化するので、そこがボトルネックですね。ただどうしようもないので、なんともw

2016-01-13 17:22:01
V @voluntas

@terurou WebRTC は RTC(遅延を 1 秒以内に)が目的なので、用途が特殊なんですよね。遅延許容できるなら配信をダウンロード形式にすべきだと思います。そうすれば 1:10000 も可能かと。スケール考えなくて良くなります。

2016-01-13 17:23:17
V @voluntas

@terurou うちの製品は、音声はテストが難しいのでやったことないですが、転送量的に 1:1000 は可能だとは思います。ただ、その魅力が遅延許されるならないかなーと。遅延が許されないシステムにしか使えない感じですね … ニッチです、ニッチ。

2016-01-13 17:25:00
てるろー @terurou

@voluntas たしかにMQTTで作っちゃってから、実質それとやってることが大差ないみたいな感じにはなってますね。Pushされてくるか否かの違いぐらいのもので。

2016-01-13 17:25:04
V @voluntas

@terurou だと思います。なので、 PUSH される必要はなくて、保存したデータを Opus で配信してしまった方がいいなと。ブローカー減らせて、Nginx だけでよくなりますね。

2016-01-13 17:26:54
てるろー @terurou

@voluntas 配信周りにあまり詳しくないまま突っ込んできてるので、大変参考になります

2016-01-13 17:34:47
てるろー @terurou

もともと低遅延を目指してはいたのだけど、ユースケースを整理してたら、shouldではあるけどmustではないという感じになった

2016-01-13 17:36:29
てるろー @terurou

とりあえずモノを出すと詳しい人から知見を得られて便利

2016-01-13 17:37:53