本文にスキップする
Version: 1.2

プレゼンテーション - 画面共有

プレゼンテーションとは、ユーザー(発表者)が他の参加者にスライドなどの資料を見せるために自分の画面を共有することをいいます。ここでは、通話タイプによるプレゼンテーション機能の使い方について説明します。

機能対応する通話タイプSDKの最低バージョン
送信(画面キャプチャーと配信)1対1通話、グループ通話(カンファレンス)Android:1.2
iOS:1対1通話 0.8、グループ通話 0.9
受信(相手の画面共有のレンダリング)1対1通話、グループ通話(カンファレンス)1対1通話:0.8
グループ通話:0.9
Note
  • バージョン1.2以降、画面共有のキャプチャーと送信はAndroidとiOSの両方でサポートされていますが、仕組みはプラットフォームごとに異なります。
    • Androidでは、PlanetKitが画面を直接キャプチャーします。アプリケーションが startMyScreenShare()を呼び出すと、PlanetKitがシステムの画面キャプチャー同意を要求し、メディアプロジェクションのフォアグラウンドサービスでキャプチャーを実行します。
    • iOSでは、アプリケーションがBroadcast Upload Extensionを通じて画面をキャプチャーし、通話開始時に設定したScreenShareKeyを使ってNWConnection経由で 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」通知を自動で表示するため、追加の通知設定は不要です。

Note

ポート番号やトークンを定義する必要はなく、setScreenShareKey()を呼び出す必要もありません。これらはiOSのBroadcast Extensionフローでのみ使用されます。

1対1通話

プレゼンテーションを開始する

Androidの1対1通話でプレゼンテーションを開始するフローは次のとおりです。

Android1対1通話画面共有開始シーケンス図

プレゼンテーションを中止する

Androidの1対1通話でプレゼンテーションを中止するフローは次のとおりです。

Android1対1通話画面共有中止シーケンス図

グループ通話

プレゼンテーションを開始する

Androidのグループ通話でプレゼンテーションを開始するフローは次のとおりです。

Androidグループ通話画面共有開始シーケンス図

プレゼンテーションを中止する

Androidのグループ通話でプレゼンテーションを中止するフローは次のとおりです。

Androidグループ通話面共有中止シーケンス図

画面共有が自動停止する場合

ユーザーが明示的に停止する場合に加えて、画面キャプチャーでエラーが報告されるとAndroid向けPlanetKitは画面共有を停止します。相手側には 1対1通話でonPeerScreenShareStopped、グループ通話でstate=disabledonScreenShareUpdateが通知され、送信側にはstate=disabledPlanetKitMyMediaStatusHandler.onScreenShareStateUpdateが通知されます。

アプリケーションが要求していなくても画面共有が停止する可能性があるため、UIはstartMyScreenShare()の戻り値だけでなくonScreenShareStateUpdateを基準に更新してください。

iOS

前提条件

  • アプリケーションは、画面キャプチャーのためにBroadcast Upload Extensionまたは同等機能を実装する必要があります。
    • Broadcast Upload Extensionを実装するには、Xcode でプロジェクトに新しい Target を追加し、「Broadcast Upload Extension」テンプレートを選択して拡張機能を有効化します。
  • 画面共有ストリーム送信に使用するポート番号、受信トークン、送信トークンを定義します。

1対1通話

プレゼンテーションを開始する

iOSの1対1通話でプレゼンテーションを開始するフローは次のとおりです。

iOS1対1通話画面共有開始シーケンス図

プレゼンテーションを中止する

iOSの1対1通話でプレゼンテーションを中止するフローは次のとおりです。

iOS1対1通話画面共有中止シーケンス図

グループ通話

プレゼンテーションを開始する

iOSのグループ通話でプレゼンテーションを開始するフローは次のとおりです。

iOSグループ通話画面共有開始シーケンス図

プレゼンテーションを中止する

iOSのグループ通話でプレゼンテーションを中止するフローは次のとおりです。

iOSグループ通話面共有中止シーケンス図

関連API

プレゼンテーション機能に関連するAPIは次のとおりです。

1対1通話

メソッド

イベント

グループ通話

メソッド

イベント

関連ドキュメント

関連サンプルコード