プレゼンテーション - 画面共有
プレゼンテーションとは、ユーザー(発表者)が他の参加者にスライドなどの資料を見せるために自分の画面を共有することをいいます。ここでは、通話タイプによるプレゼンテーション機能の使い方について説明します。
| 機能 | 対応する通話タイプ | SDKの最低バージョン |
|---|---|---|
| 送信(画面キャプチャーと配信) | 1対1通話、グループ通話(カンファレンス) | Android:1.2 iOS:1対1通話 0.8、グループ通話 0.9 |
| 受信(相手の画面共有のレンダリング) | 1対1通話、グループ通話(カンファレンス) | 1対1通話:0.8 グループ通話:0.9 |
- バージョン1.2以降、画面共有のキャプチャーと送信はAndroidとiOSの両方でサポートされていますが、仕組みはプラットフォームごとに異なります。
- Androidでは、PlanetKitが画面を直接キャプチャーします。アプリケーションが
startMyScreenShare()を呼び出すと、PlanetKitがシステムの画面キャプチャー同意を要求し、メディアプロジェクションのフォアグラウンドサービスでキャプチャーを実行します。 - iOSでは、アプリケーションがBroadcast Upload Extensionを通じて画面をキャプチャーし、通話開始時に設定した
ScreenShareKeyを使ってNWConnection経由で PlanetKitにストリームを送信します。
- Androidでは、PlanetKitが画面を直接キャプチャーします。アプリケーションが
- 相手の画面共有の受信は両プラットフォームでサポートされ、フローは同じです。
- PlanetKitはプレゼンテーション機能でHD解像度を使用しているため、クライアントのネットワーク条件が推奨帯域幅を上回っている場合に最適化されたサービスを提供できます。
Android
前提条件
画面キャプチャーはPlanetKitが開始するフォアグラウンドサービス上で実行されますが、そのサービスと権限はアプリケーション側で宣言する必要があります。アプリのAndroidManifest.xmlに次を追加してください。
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PROJECTION" />
<application ...>
<service
android:name="com.example.planet_kit_flutter.screenshare.PlanetKitScreenShareService"
android:foregroundServiceType="mediaProjection"
android:exported="false" />
</application>
PlanetKitが通知チャネルを作成し、進行中の「Screen sharing」通知を自動で表示するため、追加の通知設定は不要です。
ポート番号やトークンを定義する必要はなく、setScreenShareKey()を呼び出す必要もありません。これらはiOSのBroadcast Extensionフローでのみ使用されます。
1対1通話
プレゼンテーションを開始する
Androidの1対1通話でプレゼンテーションを開始するフローは次のとおりです。
プレゼンテーションを中止する
Androidの1対1通話でプレゼンテーションを中止するフローは次のとおりです。
グループ通話
プレゼンテーションを開始する
Androidのグループ通話でプレゼンテーションを開始するフローは次のとおりです。
プレゼンテーションを中止する
Androidのグループ通話でプレゼンテーションを中止するフローは次のとおりです。
画面共有が自動停止する場合
ユーザーが明示的に停止する場合に加えて、画面キャプチャーでエラーが報告されるとAndroid向けPlanetKitは画面共有を停止します。相手側には 1対1通話でonPeerScreenShareStopped、グループ通話でstate=disabledのonScreenShareUpdateが通知され、送信側にはstate=disabledのPlanetKitMyMediaStatusHandler.onScreenShareStateUpdateが通知されます。
アプリケーションが要求していなくても画面共有が停止する可能性があるため、UIはstartMyScreenShare()の戻り値だけでなくonScreenShareStateUpdateを基準に更新してください。
iOS
前提条件
- アプリケーションは、画面キャプチャーのためにBroadcast Upload Extensionまたは同等機能を実装する必要があります。
- Broadcast Upload Extensionを実装するには、Xcode でプロジェクトに新しい Target を追加し、「Broadcast Upload Extension」テンプレートを選択して拡張機能を有効化します。
- 画面共有ストリーム送信に使用するポート番号、受信トークン、送信トークンを定義します。
1対1通話
プレゼンテーションを開始する
iOSの1対1通話でプレゼンテーションを開始するフローは次のとおりです。
プレゼンテーションを中止する
iOSの1対1通話でプレゼンテーションを中止するフローは次のとおりです。
グループ通話
プレゼンテーションを開始する
iOSのグループ通話でプレゼンテーションを開始するフローは次のとおりです。
プレゼンテーションを中止する
iOSのグループ通話でプレゼンテーションを中止するフローは次のとおりです。
関連API
プレゼンテーション機能に関連するAPIは次のとおりです。
1対1通話
メソッド
PlanetKitCallのstartMyScreenShare()(Android)PlanetKitCallのstopMyScreenShare()(Android)PlanetKitMakeCallParamBuilderのsetScreenShareKey()(iOS)PlanetKitVerifyCallParamBuilderのsetScreenShareKey()(iOS)-
PlanetKitCallのaddPeerScreenShareView() -
PlanetKitCallのremovePeerScreenShareView()
イベント
-
onPeerScreenShareStarted -
onPeerScreenShareStopped -
PlanetKitMyMediaStatusHandlerのonScreenShareStateUpdate
グループ通話
メソッド
PlanetKitConferenceのstartMyScreenShare()(Android)PlanetKitConferenceのstopMyScreenShare()(Android)PlanetKitJoinConferenceParamBuilderのsetScreenShareKey()(iOS)-
PlanetKitPeerControlのstartScreenShare() -
PlanetKitPeerControlのstopScreenShare()