Upgrade to Pro — share decks privately, control downloads, hide ads and more …

新SkyWayの魅⼒と今後の展望

 新SkyWayの魅⼒と今後の展望

新SkyWay ローンチイベントでお話した資料です。
https://go.skyway.ntt.com/skyway_event_20230222

Yusuke Naka

April 06, 2023
Tweet

More Decks by Yusuke Naka

Other Decks in Technology

Transcript

  1. SkyWay推進室 担当課⻑ 兼 プロダクトマネージャー 仲 裕介 SkyWayとの関わり 2013.12 ⽴ち上げメンバー4⼈のうちの⼀⼈としてSkyWayを創業 DevOps

    / プリセールス / 開発者マーケティング(DevRel)全てを担う WebRTC Meetup / WebRTC Beginners Tokyo 等の開発者向け勉強会を⽴ち上げ 2017.09 商⽤化を社内で推し進め、正式リリースを達成 正式リリース後は、プリセールス / ポストセールス / DevRelに注⼒ 2020.10 プロダクトマネージャーに就任し、新SkyWay構想の具体化を推進 2022.02 社内向けのα版を経てSkyWay Betaとしてオープンベータ公開 2022.02 SkyWay推進室の⽴ち上げに関する実務を推進 2023.01 新SkyWayをサービスリリース 横浜市在住、最近の趣味は⾃転⾞
  2. ü Pub/SubモデルのAPI ü 同時通話⼈数の拡⼤ ü SFU Botの導⼊ ü サイマルキャストの導⼊ ü

    認証・認可機能の充実化 ü 旧SkyWayからの細かな改善点 いいね︕ 新SkyWayの特徴
  3. Pub/SubモデルのAPI Channel (Room) // P2P方式のRoom情報を取得(なければ作成) const room = await SkyWayRoom.FindOrCreate(context,

    { type: 'p2p', name: roomNameInput.value, }); // Roomに参加する const me = await room.join(); myId.textContent = me.id; // 自分の音声と映像をPublish(送信) await me.publish(audio); await me.publish(video); 送信側の実装イメージ // 受信ボタンをクリックしたら subscribeButton.onclick = async () => { // 送信されているメディアをSubscribe(受信) const { stream } = await me.subscribe(publication.id); // メディア再生用のHTMLエレメントを作成(映像の場合) let newMedia = document.createElement('video’); // 受信したメディアにHTMLエレメントを適用 stream.attach(newMedia); // 再生する newMedia.play(); 受信側の実装イメージ ※Roomパッケージを利用した場合のイメージ ※説明上不要な部分は省略 Pub/Subモデルのイメージ
  4. 項⽬ システム上限 ⽬安 Channelあたりの最⼤参加可能Member数 320 最⼤同時通話⼈数(映像・⾳声) ※ SFU利⽤時 100 ※1⼈が最⼤99⼈に送信可能

    ※SFU botも数に含む 映像: 50 ※端末負荷が⾼いため現実ライン 最⼤同時通話⼈数(映像・⾳声・データ) ※ P2P(Mesh)利⽤時 15 映像: 4 ※端末負荷が⾼いため現実ライン ※ 旧SkyWayのSFUを使った最大通話人数は20名程度 Channel(Room) A B C D E F 旧SkyWayと新SkyWayの⼤きな違いは、 Channel(Room)への参加⼈数 =通話⼈数 ではないこと 同時通話⼈数の拡⼤
  5. SFU Botの導⼊ A B C SFU bot SFUで1:多配信 P2Pで会話 ChannelにSFU

    botを参加させることで多人数通話を実現 同⼀のChannel内で SFU経由とそれ以外の 通話が共存可能 今後botとしてSFU以 外の機能も提供予定 (録⾳録画 botなど) Publish Subscribe // SFU botを利用するための準備 const plugin = new SfuBotPlugin(); const context = await SkyWayContext.Create(token); context.registerPlugin(plugin); const channel = await SkyWayChannel.FindOrCreate(context, { name: channelNameInput.value, }); // Channelにbotが居なければ参加させる if (channel.bots.length === 0) { await plugin.createBot(channel); } const bot = channel.bots[0] ?? (await plugin.createBot(channel)); const me = await channel.join(); myId.textContent = me.id; { // メディアをPublish const publication = await me.publish(audio); // PublishしたメディアをSFU botに転送させる await bot.startForwarding(publication); } // 受信ボタンをクリックしたら subscribeButton.onclick = async () => { // SFU botが転送しているメディアをSubscribe(受信)する const { stream, subscription } = await me.subscribe(publication.id); SFU Botに送信する際の実装イメージ SFU Botから受信する際の実装イメージ Channel
  6. サイマルキャストの導⼊ SFU bot ChannelにSFU botを参加させることで多人数通話を実現 Publish const publication = await

    me.publish(video, { // Publishする際にencodingパラメーターで品質を設定 encodings: [ { maxBitrate: 80_000, id: 'low' }, { maxBitrate: 200_000, id: 'middle' }, { maxBitrate: 400_000, id: 'high' }, ], }); await bot.startForwarding(publication); 送信側の実装イメージ Channel Hight Middle Low 品質の異なる複数の映像を送信 A B 広帯域 狭帯域 Subscribe Subscribe ※解像度、ビットレート、フレームレート(iOS/Androidは今後対応) で品質を設定可能 // 受信する際に品質を指定する場合 const { stream, subscription } = await me.subscribe(publication.id, { preferredEncodingId: 'low' }); // 受信した後に品質を切り替える場合 const { stream, subscription } = await me.subscribe(publication.id, { preferredEncodingId: 'low' }); const switchEncodingSetting = async () => { if (subscription.preferredEncoding === 'low’) // 品質lowの場合、Hightに切り替える subscription.changePreferredEncoding('high'); } else { subscription.changePreferredEncoding('low'); } } 受信側の実装イメージ ※その時の通信環境等を踏まえて最適な品質を選択するため明示的に選択しなくても良い ※制御が効くまでにタイムラグがあるため予め選択してもよい
  7. 認証・認可機能の充実化 SkyWay Auth Tokenを使うことで柔軟な認証・認可を実現 02を実現するための認証情報設定例 Aチーム所属 Aチーム 会議室 Bチーム 会議室

    視聴のみ 参加者 発⾔可能 参加者 管理者権限 悪意のある 参加者 強制退室 ⼊室の権限管理 01 参加者ごとの権限設定 02 管理者権限による 参加者の操作 03 const token = new SkyWayAuthToken({jti: uuidV4(), iat: nowInSec(), exp: nowInSec() + 60 * 60 * 24, scope: { app: { id: appId, actions: ["read"], channels: [ { name: 'roomA', action: ["create", "delete"], members: [ { // スピーカーAはRoomAでメディアの送受信が可能 name: 'speakerA', actions: ["create", "delete"], publication: { action: ["create", "delete"] }, subscription: { action: ["create", "delete"] } }, { // スピーカーA以外のRoomA参加者はメディアの受信のみが可能 name: '*', actions: ["create", "delete"], publication: { action: [] }, subscription: { action: ["create", "delete"] } } ], ※スペースの関係で以下省略
  8. コーデックの選択肢拡⼤ • SFUで利⽤できるサポートコーデックにH264を追加※1 • VP9, AV1, Opus/RED(パケロス耐性向上)を指定可能※2 • ⾮発話区間の帯域削減が可能なOpus DTXを利⽤可能※1

    ※1: JavaScript SDKのみ ※2: P2P通話のみ (JavaScript SDKはSFUでVP9を利⽤できる) iOS SDK / Android SDKの機能を充実 • 映像ファイルや任意の映像ソースの送信に対応 • iOS / Android ともに画⾯共有が可能 • 受信した映像フレームにアクセスできる(UI表⽰以外の使い ⽅が可能)※3 • ソースコードを公開 ※3: Android SDKのみ 旧SkyWayからのその他の変更点 詳しくは開発者ドキュメントをご覧ください https://skyway.ntt.com/ja/docs/
  9. 今後の展開 4⽉〜5⽉ バーチャル背景実装⽤ ライブラリ提供(Web版) 5⽉〜6⽉ TURNサーバ IPアドレス公開 7⽉〜9⽉ 録⾳・録画機能 ベータ提供開始

    8⽉〜10⽉ 通話状況分析機能 ベータ提供開始 2023年 通話品質や状況を可視化、通話不具合の 原因調査などを⽤意にするためのダッシ ュボードを提供 ※2023/4/4時点の想定であり提供内容や時期を約束するものでは有りません 現時点では時期は未定ですが今後提供を視野に検討していくもの • ノイズキャンセリング • SDKラインナップ拡充(Unityなどのニーズに対応) • お客様のバックエンドサーバからSkyWayを操作するAPI • 超低遅延配信 • 通信負荷低減 ※ 細かな改善やSDKの使い勝手向上などは継続して実施!