2.8K Views
July 19, 23
スライド概要
7月のXRミーティングの登壇資料。
最近Mixed Reality Feature ToolにAzure Communication Services用のUnity SDKが公開されていたのでその調査を行った話。
サンプルコードはこちらhttps://github.com/TakahiroMiyaura/ACSXRSamples
ICT業界でソフトウェアエンジニア/アプリケーションアーキテクトを担当。 社内ではXR関連技術に関する啓もう活動や技術支援に従事。 業務の傍ら、XR(特にMixed Reality領域)についての開発技術の調査、開発などを行っています。 また、「大阪駆動開発」コミュニティ所属しており、日々の調査で得た知見はコミュニティを通して情報発信を行っています。
AzureのMixed Reality Service関連を調べてみた ~ 特にAzure Communication Services Calling Unity SDKを… 2023/07 XRミーティング takabrz1 Takahiro Miyaura
Microsoft MVP for Mixed Reality 2018-2023 某会社でSE(アプリケーション領域のアーキテクト的なお仕事なはず)= XRは趣味です(貢献領域:Mixed Reality) 宮浦 恭弘 (Miyaura Takahiro) ◼ 大阪駆動開発(とHolomagicians)コミュニティに生息 ◼ HoloLens日本販売してからxR系技術に取組む ◼最近は ✓ ✓ Mixed Reality Toolkit 3とか Snapdragon Spacesとか戯れている。 ◼ 新しい技術や、MRに使えそうな技術を調べる 技術Tips : https://qiita.com/miyaura @takabrz1 ※よかったらこれを機にお知り合いになってください
まずは近況報告を・・・ takabrz1 Takahiro Miyaura
沢山の人からの支援のおかげで Microsoft MVP for Mixed Realityを再受賞(6年)できました。 2023/7/19 Copyright © 2023 Takahiro Miyaura 4
Microsoft Build Japanでちょっと話をしてきた 【T1-5】Metaverse すらも構築できる?.NET が支えるマルチプラットフォーム開発 MVPの初音さんと一緒に 内容的には・・・ Microsoft Build 2023の中であった ○ Microsoft Meshのセッション ○ .NET MAUIのセッション かいつまんで解説&ディスカッション ※結果的にMesh系の話がおおめ Youtubeで公開中! https://youtu.be/gao7lYjI5fg 2023/7/19 Copyright © 2023 Takahiro Miyaura 5
さて本題 takabrz1 Takahiro Miyaura
Mixed RealityなSDKを調べてました。 いくつか面白い話を見つけました。 1.MRTK3は引続き開発がすすんでる (定期確認) 2.Azure Remote Renderingがね。。。 3.なんか増えてるライブラリ 2023/7/19 Copyright © 2023 Takahiro Miyaura 7
2. Azure Remote Renderingがね。。。 Meta Quest 2/Pro 対応してるよ(Public Previewでね) https://learn.microsoft.com/ja-jp/azure/remote-rendering/overview/system-requirements#supported-platforms-and-devices 疑問: Meta QuestってAndroidじゃないですか?え?じゃああれとか、あれとか動い ちゃうの!? だめでした。。。 アプリは起動しないですね。。。 VRXに至ってはSOCとかハードも酷似してるのに・・・ 2023/7/19 Copyright © 2023 Takahiro Miyaura 8
3.なんか増えてるのライブラリ Mixed Reality Feature Tool見てると時々増えてる Mixed Reality WebView(Preview) 2023/7/19 Azure Communication Services Calling Unity SDK (以降ACS Calling Unity SDK) Copyright © 2023 Takahiro Miyaura 9
ということで Azure Communication Services使ってみた takabrz1 Takahiro Miyaura
Azure Communication Servicesとは コミュニケーション関連の機能をアプリに導入可能 導入方法 ○REST API ○クライアントSDK サポートする通信形式 ○音声およびビデオによる通話 ○リッチ テキスト チャット ○SMS ○電子メール 2023/7/19 Copyright © 2023 Takahiro Miyaura 11
Azure Communication Servicesとは アーキテクチャの例 アプリケーションがスケジュールされた Teams 通話に参加する https://learn.microsoft.com/ja-jp/azure/architecture/guide/mobile/azure-communication-servicesarchitecture#application-joins-a-scheduled-teams-call 2023/7/19 Copyright © 2023 Takahiro Miyaura 12
カスタムアプリでの話 Teamsアプリでの話
カスタムアプリは ACSのSDK使って Teams会議に参加 カスタムアプリでの話
カスタムアプリでの話 この部分はTeams会議リンク を共有する仕組みについての話
③~⑤の手順は Teamsの会議リンクを利用して会議に参加する仕組みの話 Teamsアプリの場合:TeamsのUIから認証されたアカウントユーザで会議に参加 カスタムアプリの場合:ACS SDKのCallクライアントに必要な情報を設定して接続を開き会議に参加 カスタムアプリでの話 Teamsアプリでの話
Azure Communication Servicesとは つまりカスタムアプリでTeams会議に参戦させるためには。。。 ○接続先のTeamsリンクが必要 ○ACS SDK使ってアクセス ○ACSとの接続は要トークン 2023/7/19 Copyright © 2023 Takahiro Miyaura 17
HoloLens 2用で試す 2023/7/19 Copyright © 2023 Takahiro Miyaura 18
だいぶ前に試されてる アキヒロさんの解説記事(わかりやすい) https://akihiro-document.azurewebsites.net/post/hololens2_azurecommunicationserviceswithunity/ ACS Calling Unity SDKは・・・ ○ 基本的には左記の内容に沿ってる ○ ライブラリをパッケージング ○ Unity上でSDKが扱えるようにインター フェース部品を提供 2023/7/19 Copyright © 2023 Takahiro Miyaura 19
今日時点で分かったこと β版ということもあってまだ機能が完全ではない カスタムアプリに簡単に ○ Teams会議やACS経由のコミュニケーションを導入可能 ○ HoloLens 2ならMixed Reality Captureを共有可能 ○ 参加者のWebカメラの映像はUnity上では描画できない (UI View依存) →現段階な気がする。もしくはやり方を見いだせていないだけかも。 2023/7/19 Copyright © 2023 Takahiro Miyaura 20
HoloLens 2用で試す サンプルは公開しました。(取説などはこれから整備) https://github.com/TakahiroMiyaura/ACSXRSamples 参考情報! AndroidまでサポートしたACSのサンプルもありました。 こちらは、今回のUnity用SDKを使ってはいないです。 (やっていることはほぼ同じのため参考にはなる) https://github.com/hololux/azure-communication-services-unity 2023/7/19 Copyright © 2023 Takahiro Miyaura 21
動かすとこんな感じ カメラ競合でTeamsにつながるとキャプチャ止まる 2023/7/19 Copyright © 2023 Takahiro Miyaura 22
HoloLens 2用で試す ライブラリ ○ Azure Communication Services Calling SDK 1.0.0-β1 ○ Mixed Reality Toolkit 3 Pre.17 ○ Mixed Reality OpenXR Plugin 1.7.2 ツール ○ Mixed Reality Feature Tool v1.0.2209.0 Preview (MicrosoftのMixed Reality の色々セットアップツール) ○ Visual Studio 2022 ○ Unity Hub 3.4.2 ○ Unity 2021.3.16f1 ○ Packages ○ 関連パッケージ色々(自動で保管されるので。。。) 2023/7/19 Copyright © 2023 Takahiro Miyaura 23
HoloLens 2用で試す 実装手順 1. 2. 3. 4. 5. 6. 7. 2023/7/19 空の3Dプロジェクト作成 Mixed Reality Feature Toolでライブラリ設定 HoloLens 2用デプロイとMRTK3の設定 UIを作る(操作パネル、適当なオブジェクト) ACS Calling Unity SDKでTeamsに接続することを実装 デプロイ後Teams会議に参加してみる Mixed Reality CaptureがTeamsで見られたら(゚д゚)ウマー Copyright © 2023 Takahiro Miyaura 24
2. Mixed Reality Feature Toolでライブラリ設定 ACS Calling SDK と MRTK3一式,あとOpenXR Pluginを設定 2023/7/19 Copyright © 2023 Takahiro Miyaura 25
4.UIを作る(操作パネル、適当なオブジェクト) きわめてシンプルすぎるUIパネル 表示名 通話開始 Mute/Unmute 通話終了 後は適当に回転して触れるオブジェクトを入れてみました 2023/7/19 Copyright © 2023 Takahiro Miyaura 26
以降はコードなのですが Microsoft Learnのドキュメントが優秀です 通話のヒーロー サンプルを使ってみる https://learn.microsoft.com/ja-jp/azure/communication-services/samples/calling-herosample?tabs=uwp&pivots=platform-windows この後説明する手順と必要なコンポーネントが書かれています。 厳密にはUnity用のSDKとクラス名違うのですがやることは同じなので参 考になります。 2023/7/19 Copyright © 2023 Takahiro Miyaura 27
5. ACS Calling Unity SDKでTeamsに接続することを実装 エージェントの開始 クライアントを認証する private async Task InitCallAgent(string userToken, string userName) { var tokenCredential = new CallTokenCredential(userToken); _callClient = new CallClient(); _deviceManager = await _callClient.GetDeviceManager(); _localVideoStream = new LocalVideoStream[1]; 認証トークンの設定 var callAgentOptions = new CallAgentOptions { DisplayName = userName 表示名の設定 }; _callAgent = await _callClient.CreateCallAgent(tokenCredential, callAgentOptions); _callAgent.CallsUpdated += OnCallsUpdatedAsync; 接続! _callAgent.IncomingCallReceived += OnCallAgentIncomingCall; } 2023/7/19 Copyright © 2023 Takahiro Miyaura 28
5. ACS Calling Unity SDKでTeamsに接続することを実装 Teamsへの参加 Teams会議リンクを渡してTeamsに参加&カメラ共有 internal async Task JoinTeamsCallAsync(string teamsMeetingUrl) { GetCameraDevice(); var joinCallOptions = new JoinCallOptions(); joinCallOptions.OutgoingVideoOptions = new OutgoingVideoOptions { Streams = _localVideoStream }; カメラ共有の設定 var teamsMeetingLinkLocator = new TeamsMeetingLinkLocator(teamsMeetingUrl); _call = await _callAgent.JoinAsync(teamsMeetingLinkLocator, joinCallOptions); Teamsに接続! if (_call != null){ _call.RemoteParticipantsUpdated += OnRemoteParticipantsUpdatedAsync; _call.StateChanged += OnStateChangedAsync; } } 2023/7/19 Copyright © 2023 Takahiro Miyaura 29
5. ACS Calling Unity SDKでTeamsに接続することを実装 HoloLens 2の映像を送るためのストリームの取得 以下の実装でOK private async void GetCameraDevice() { if (_deviceManager.Cameras.Count > 0) { var videoDeviceInfo = _deviceManager.Cameras[0]; _localVideoStream[0] = new LocalVideoStream(videoDeviceInfo); var localUri = await _localVideoStream[0].MediaUriAsync(); } } 2023/7/19 Copyright © 2023 Takahiro Miyaura 30
参考 ACS Calling Unity SDKについて Unityで使いやすいようにSDKのラッパー部品といった感じ 1. 現在のライブラリはUWP専用でUWPのディレクティブ必須 internal async void Mute() { #if WINDOWS_UWP await _call.MuteAsync(); #endif } 2. つまり、Unity Editor上のPlay Modeでは動きません。 3. 名前空間は「Azure.Communication.Calling.UnityClient」 2023/7/19 Copyright © 2023 Takahiro Miyaura 31
Azure Mixed Reality なサービス Azure Communication Services Calling Unity SDK ✓ まだβ版でちょっと物足りない ✓ 参加者のWebカメラの映像はHoloLensアプリでは表示がまだできない ✓ 一方でMixed Reality CaptureをTeamsに流せるのは使い道あるかも? ✓ おそらくUWPと同じ考えからでAndroid対応もできそう ✓ 既にそれっぽいサンプル作っている素敵な人はいる (https://github.com/hololux/azure-communication-services-unity) Azure Communication Servicesが気軽に使えると Teamsなどと連携したXRコンテンツがつくりやすい 2023/7/19 Copyright © 2023 Takahiro Miyaura 32
大阪駆動開発 関西を中心に、IT系のおもしろそうなことを 楽しんでやるコミュニティ