Slide 1

Slide 1 text

©MIXI WebRTC技術の活⽤ 吉野純平

Slide 2

Slide 2 text

2 ©MIXI ● 遠隔地の映像の確認 ● AIと⼈との作業協調 ● スマホからの映像送受信 ● 映像機器との映像送受信 ○ HDMI/SDIなどのデバイスへの描画や取り込み ● SMPTE ST2110とWebRTCの接続 私たちのWebRTCの活⽤の⼀例

Slide 3

Slide 3 text

3 ©MIXI 掛け合わせによる実装の種類 ブラウザ アプリ スマホ PC SDI等のボードが ついた機器 ✖ ● ブラウザはlibwebrtcで実装されている ● アプリはライブラリに選択肢がある ● スマホ、PCを活用することも多々あるが映像機器のインターフェ イス(SDI等)を使うことが多々ある

Slide 4

Slide 4 text

4 ©MIXI ● ライブラリのビルド ● デバイスやそのドライバとの共存 ● 負荷対策として、FPSや解像度を下げられる場所があるか ● ブラウザ実装のありがたさと互換性 これらをやる上での難所

Slide 5

Slide 5 text

5 ©MIXI ● libwebrtcが多様な機能を持っていてすごいが悩みもある ○ 他のライブラリと共存するのに一手間かかる場合もある ○ とにかく巨大 ○ インターフェイスの名前が直感的になるのが大変 ● libdatachannelは⼩さくて便利だが不⾜もある ○ libwebrtcに対して機能が少ない。 ■ ペイロードヘッダーを自分で処理する必要がある ■ メディアのencode/decodeを自前で処理する必要がある ○ 外部依存が少ない ライブラリのビルドやリンク IP UDP RTP Payloadヘッダ Payload

Slide 6

Slide 6 text

6 ©MIXI ● 映像デバイスはFPSに従ってデータを要求してくる ○ コールバック等で都度呼ばれる ● データの要求に期待される応答時間内に返す必要がある ○ 間に合わない場合の挙動は実装次第 ● ロックを可能な限りせずメモリを渡したい デバイスやドライバ:output側の悩み

Slide 7

Slide 7 text

7 ©MIXI ● 映像デバイスはFPSに従ってデータを⼊⼒してくる ● データが⽤意できたところでSoftware割り込み ○ 無駄に割り込みをかける実装がある場合がある ○ 理想的にはデータを処理するコアで割り込みをして欲しい ● ドライバの実装の課題に対してどう向かい合うか ○ デバイスを複数に見せて、仮想化技術等で割り込みコアを絞るなどの回 避策はあった ○ マシンのサイジング選択肢に避けたいルールを発生させうる ■ 例:大きなマシンで集約したくてもできない等 デバイスやドライバ:input側の悩み

Slide 8

Slide 8 text

8 ©MIXI ● オペレータの確認⽤でお客さんが⾒るものではないなら下げられる ● AIが⾒る場合も必要範囲に下げることは可能 GUIのソフトウエアに対して映像を多数出す場合の考慮 decode I420 Scale I420 to ARGB ARGB to ABGR map(int,vector) ドライバから描き場所を指 定された要求がくる アプリUI 描画3FPS 今回入ってくる映像の 解像度は多様なため ここで揃える 書 ARGB scale down 参照 参照 30FPS頑張るゾーン 運用に耐えればいいスレッド UIが書きやすい言語で書く

Slide 9

Slide 9 text

9 ©MIXI ● libdatachannelをMIXIでは活⽤して⾏っています。 ○ ブラウザ(libwebrtc)は引き続き活用させていただいています ○ アプリ組み込みにはlibdatachannelを活用 ● 映像機器との⼊出⼒まわりをいろいろやっています まとめ

Slide 10

Slide 10 text

©MIXI