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

コンテンツ共有

コンテンツ共有APIは、時間の流れによって変化するデータをピアと共有できるようにします。共有するデータのタイプは何でも構いませんが、最大1キロバイトでなければなりません。

対応する通話タイプSDKの最低バージョン
1対1通話、グループ通話(カンファレンス)WebPlanetKit 5.2
Tip

1対1通話とグループ通話共にコールセットアップ(call setup)が完了した後、コンテンツ共有APIを使用できます。

コンテンツ共有タイプ

LINE Planetが提供するコンテンツの共有方法は、以下のとおりです。

コンテンツ共有タイプ説明備考
一般共有各ユーザーが自分のデータを共有します。
排他的(exclusive)共有ルームにいるすべてのユーザーに同じ共有データが必要な場合に使用します。詳しくは、排他的共有を参照してください。
ルーム範囲(room-scoped)共有共有データのライフタイムがルーム範囲に指定されます。詳しくは、ルーム範囲共有を参照してください。グループ通話でのみ利用可能
Note

3つのタイプのコンテンツ共有は独立しているため、1つのルーム内で同時に使用できます。

関連API

通話タイプごとに、コンテンツ共有に関するAPIについて説明します。

1対1通話

1対1通話でコンテンツを共有するには、以下のメソッドを使用します。

タイプメソッド説明関連イベントコールバック
一般共有setSharedContents()すべてのピアと共有する共有データの設定MakeCallDelegateevtPeerSharedContentsSet
VerifyCallDelegateevtPeerSharedContentsSet
-unsetSharedContents()以前設定した共有データの解除MakeCallDelegateevtPeerSharedContentsUnset
VerifyCallDelegateevtPeerSharedContentsUnset
排他的共有setExclusivelySharedContents()すべてのピアと共有する排他的共有データを設定MakeCallDelegateevtPeerExclusivelySharedContentsSet
VerifyCallDelegateevtPeerExclusivelySharedContentsSet
-unsetExclusivelySharedContents()以前設定した排他的共有データの解除MakeCallDelegateevtPeerExclusivelySharedContentsUnset
VerifyCallDelegateevtPeerExclusivelySharedContentsUnset

グループ通話

グループ通話でコンテンツを共有するには、以下のメソッドを使用します。

タイプメソッド説明関連イベントコールバック
一般共有setSharedContents()すべてのピアと共有する共有データの設定evtPeersSharedContentsSet
-unsetSharedContents()以前設定した共有データの解除evtPeersSharedContentsUnset
排他的共有setExclusivelySharedContents()すべてのピアと共有する排他的共有データを設定evtPeerExclusivelySharedContentsSet
-unsetExclusivelySharedContents()以前設定した排他的共有データの解除evtPeerExclusivelySharedContentsUnset
ルーム範囲共有setRoomSharedContents()ルームのすべてのピアと共有するルーム範囲共有データの設定evtPeerRoomSharedContentsSet
-unsetRoomSharedContents()以前設定したルーム範囲共有データの解除evtPeerRoomSharedContentsUnset

ピアに渡される情報

あるユーザーが共有コンテンツ設定メソッドのいずれかを使用してデータ共有を開始すると、それぞれ該当するイベントコールバックが他のユーザー対して呼び出されます。このコールバックは次のような情報を渡します。

フィールド説明
userId共有コンテンツを設定したユーザーのユーザーID
data共有データ
elapsedTimeAfterSetMs共有データの最終修正から経過した時間(ミリ秒単位)

経過時間情報を利用することで、共有データの最終修正から経過した時間を計算できます。

排他的共有

「排他的共有」とは、共有データがルーム(または通話)内に、たった1つしか存在しないことを意味します。

ルームにいるすべてのユーザーに同じ共有データが必要な場合は、setExclusivelySharedContents()およびunsetExclusivelySharedContents()を使用します。

Note

排他的共有コンテンツの場合、setExclusivelySharedContents()を呼び出した参加者だけが共有データを修正できます。

ルーム範囲の共有

PlanetKitは、ルーム範囲のコンテンツを共有するためにsetRoomSharedContents()およびunsetRoomSharedContents()を提供します。この機能はグループ通話でのみ利用できます。その特長は以下のとおりです。

  • データライフタイム
    • ルーム範囲内のコンテンツ共有では、unsetRoomSharedContents()を呼び出さない限り、データのライフタイムとルームのライフタイムは同じです。
    • 一方、setSharedContents()setExclusivelySharedContents()で共有したデータのライフタイムは、そのAPIを呼び出した参加者によって左右されます。つまり、その参加者が退出するとデータも無効になります。
    • それに対して、setRoomSharedContents()で共有したデータは、すべての参加者が退出するか、誰かがunsetRoomSharedContents()を呼び出さない限り保持されます。
  • 複数の設定者と1つのインスタンス
    • ルーム範囲内のコンテンツ共有で、setRoomSharedContents()で共有したデータは、すべての参加者が変更できます。したがって、共有データの値は、最後に呼び出したsetRoomSharedContents()で設定したデータになります。
    • ルーム範囲内のコンテンツ共有は、設定する人が複数いることを想定しているので、最後の設定者が退出しても、残りの参加者は関連イベントを受信します。

例 - 発言する前に手を挙げる

コンテンツ共有APIの使い方について簡単な例を見てみましょう。この例は、排他的共有とは何であるか、共有データ構造をどのように設計するのかを示しています。

通話の参加者が発言する前に「手を挙げる」機能をコンテンツ共有APIで実装するとします。また、「手を挙げる」フラグは、わずか3秒(3,000ミリ秒)の間だけ有効であると仮定します。

まず、参加者が同時に手を挙げることができると仮定します。つまり、複数の参加者が手を挙げることができます。

  1. 共有データ構造:flag
  2. 発言したい人は誰でもflag=truesetSharedContents()を呼び出します。
  3. evtPeersSharedContentsSetに含まれるユーザーID情報により、誰が発言しようとしているのかすべての参加者が知ることができます。
  4. 「経過時間3,000ミリ秒未満」の条件を満たす参加者だけが手を挙げることができます。誰かが手を挙げてから4,000ミリ秒後に参加した新規の参加者は、evtPeersSharedContentsSetを受け取ることで誰が手を挙げたのかは分かりますが、その時点では手を挙げることはできません。

次に、一度に1人の発言者しか手を挙げられないと仮定します。つまり、たった1人の参加者だけが手を挙げることができます。この場合はマスターが必要です。マスターのユーザーIDをuser-mと仮定します。

  1. 共有データ構造:flag
  2. マスターがh-user-id=NULL, flag=falseと共にsetExclusivelySharedContents()を呼び出します。それ以降、他の参加者がsetExclusivelySharedContents()を呼び出しても無視されます。
  3. 発言しようとする人は誰もがuser-msendShortData()を呼び出します。
  4. マスターがそのうちの1人だけを選びます。そのユーザーをuser-aと仮定します。
  5. マスターがh-user-id=user-a, flag=trueと共にsetExclusivelySharedContents()を呼び出します。
  6. すべての参加者は、evtPeerExclusivelySharedContentsSetからuser-ah-user-id)が発言しようとしている(flag=true)ことが分かります。