5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

agora.io VideoSDKとReal-time MessagingSDKを利用した招待入室

5
Last updated at Posted at 2019-12-03

概要

今回はVideoSDKとReal-time MessagingSDKを利用した招待入室サンプルをご紹介します。
概要としては、各ログインしたユーザを一覧で表示し、その一覧から招待したいユーザを選択し、招待を送ります。招待を受けたユーザは招待元ユーザが用意した部屋(チャネル)に入室することができます。
本サンプルは、agora.ioから提供されているVideoSDK、Real-time MessagingSDKを組み合わせて実現しています。

サンプル

こちらをご利用ください。
(バージョン3はAgoraIO-VideoRTMInvite-master-v3、バージョン4はAgoraIO-VideoRTMInvite-master-v4

実装イメージ

機能一覧

・ログイン
・ユーザ一覧(※ログイン済みユーザのみ)
・招待送付/受領
・入退室
・ログアウト

画面イメージ

・ログイン

・ユーザ一覧

・入室前(招待元)

・入室前(招待先)

・入室後

シーケンス

ユーザ側の画面遷移とReal-time Messaging SDKのメッセージング処理、およびVideoSDKの入室までのやりとり(流れ)をざっくりと記載したものになります。
(注)ログアウト処理等は一部省略しています。

開発環境

・agora.io VideoSDK(Web)
・Real-time Messaging SDK(Web)

※本サンプルはjquery.mobile-1.4.0を利用しています。
jquery.mobileの機能を使用して1つのHTMLページ内にアンカーのような記述をして複数ページを遷移させています。

Real-time Messaging SDKの実装部分(メッセージ処理)

・appidの設定

//appIdを設定してください。
var appId ="***"; 

・インスタンスの生成

clientRtm = AgoraRTM.createInstance(appId);

・サービスへの接続

clientRtm.login({uid: uidRtm}).then(function(){(省略)});

・Channelへの入室

channelRtm = clientRtm.createChannel(channelRtm);
channelRtm.join().then(function(){ (省略)}

・メッセージの送信

var localMessage = "RequestCall:" + memberId; //(例)”RequestCall:998877”
channelRtm.sendMessage({text:localMessage}).then(function(){(省略)});

※(例)”RequestCall:998877”の場合、"RequestCall"が招待メッセージ、"998877"が招待先IDとなります。

・メッセージの受信

channelRtm.on("ChannelMessage", function (sentMessage, senderId) {
  var msgtxt = sentMessage.text
  var result = msgtxt.split(':');
  console.log("msg1 " + result[0]); //(例) RequestCall
  console.log("msg2 " + result[1]); //(例) 998877 (招待先ID)
  if (result[0]=="RequestCall"){ //"RequestCall"の場合
    if (uidRtm == result[1]){    //招待先ID(998877)の場合
      //画面遷移処理(省略)
    }
  }
});

・退室(ログアウト)

channelRtm.leave(); //チャネル退室
clientRtm.logout(); //ログアウト

・その他(ログイン済みユーザの取得)

var result = new Promise(function(resolve) {
    resolve(channelRtm.getMembers());
})
result.then( function(data){ 
  for(let i = 0; i < data.length; i++) {
    var txt = data[i];
    //ユーザ一覧の更新処理(省略)
  }
} );

※メッセージが受信されるとChannelMessage()がコールバックされます。
sentMessageには受信メッセージ、senderIdには招待元IDが入っています。

Video SDKの実装部分

・インスタンスの生成と初期化

var client = AgoraRTC.createClient({ mode: "live", codec: "vp8", role:"host" });

・Channelへの入室

async function join() {
 /*省略*/
  [ options.uid, localTracks.audioTrack, localTracks.videoTrack ] = await Promise.all([
    // join the channel
    client.join(options.appid, options.channel, options.token || null,options.uid),
    // create local tracks, using microphone and camera
    AgoraRTC.createMicrophoneAudioTrack(),
    AgoraRTC.createCameraVideoTrack()
  ]);
 /*省略*/
}

・Track追加時

async function subscribe(user, mediaType) {
  const uid = user.uid;
  // subscribe to a remote user
  await client.subscribe(user, mediaType);
  console.log("subscribe success");
  if (mediaType === 'video') {

    if ($('div#video #agora_remote' + uid).length === 0) {
      $('div#video').append('<div id="agora_remote' + uid + '" style="float:left; width:810px;height:607px;display:inline-block;"></div>');
    }
    user.videoTrack.play('agora_remote' + uid);
  }
  if (mediaType === 'audio') {
    user.audioTrack.play();
  }

}

・退室

async function leave() {
  await client.leave();
}

動作確認

動作を確認してみます。
(注)モバイルデザインのため、PCの場合はブラウザの幅を適宜見やすいように調整してください。

1. 初期表示とログイン

uid(ユーザ名)を入力し、Loginボタンをクリックします。(※uidは英数10文字以内)

2. ユーザ一覧

2-1.(ログイン後の)ユーザ一覧
ログインしたユーザを表示しています。※"(you)"と記載しているのは自分になります。

2-2.(別のユーザがログイン後の)ユーザ一覧
”998877”が入室したのでユーザ一覧に追加されています。

※ユーザ一覧の同期
Refreshボタンをクリックすると、最新のユーザ情報に同期します。

3. 招待の送付

招待元(123ABC)が招待先(998877)に招待を送ります。

 3-1.招待元(123ABC)のユーザ一覧で”998877”をクリックします。

 3-2.招待元(123ABC)の画面が入室画面に切り替わります。
【招待元(123ABC)】

4. 招待の受領

招待先(998877)に招待が届きます。
【招待先(998877)】

5. 入室

招待元、招待先がそれぞれ入室します。

招待入室ができました。

最後に

agora.ioに関するお問い合わせはこちらから
スクリーンショット 0001-08-15 13.41.56.png

5
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?