8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ビデオ通話中に(時間制限後などに)退室させるサンプル

Last updated at Posted at 2020-07-10

概要

ビデオ通話中に(時間制限後などに)退室させるサンプルについてご紹介します。

パターンとしては4つになります。

1. クライアント自身のタイマーで追い出す方法
2. Real-time messaging SDKのテキスト送受信で追い出す方法
3. Tokenの有効期限で追い出す方法
4. RESTFul APIで追い出す方法

サンプルリンクはこちらをご利用ください。
agoraLeaveSample_v4

1.クライアント自身のタイマーで追い出す方法

クライアント自身のタイマーで追い出す方法になります。

サンプル

サンプルの「CASE1_Timer」を利用します。

実装

JavaScriptのタイマー処理を利用して、
タイムアウト時に退室するよう実装します。

index.js
//タイムアウト
function timeOut(){
  console.log("timeOut");
  leave();
};

//タイマー設定
function startTimer(sec){
  console.log("startTimer:" + sec);
  tm = setTimeout(timeOut, sec);
}

//タイマー削除
function clearTimer(){
 console.log("clearTimer");
 clearTimeout(tm);
}

動作確認

  1. サンプルを起動し、入室します。
  2. StartTimer(60)ボタンをクリックし、タイマーを開始(60秒)します。
  3. (60秒後)タイムアウトします。
  4. 退室処理が行われます。

<サンプル画面/コンソール(F12)>

2.Real-time messaging SDKのテキスト送受信で追い出す方法

Real-time messaging SDKを利用して他拠点にメッセージ(退室依頼を示す)を送り、
それを受け取った拠点を追い出します。

サンプル

サンプルの「CASE2_RTM」を利用します。

実装

メッセージ送信/受信の実装部分になります。

index.js
//実行ボタンクリック
function leaveOfremote () {
  sendChannelMessage(prepMessage("leave",options.remoteuid));
}

//送信メッセージ編集
function prepMessage(msg,id){
  console.log(id + ":" + msg);
  return id + ":" + msg;
}

//メッセージ送信部分
function sendChannelMessage(localMessage){
  rtc.channelRtm.sendMessage({text:localMessage}).then(function(){
    console.log("AgoraRTM client succeed in sending channel message: " + localMessage);
  }).catch(function(err){
    console.log("AgoraRTM client failed to sending role" + err);
  });
}

//メッセージ受信部分
function receiveChannelMessage(){
 
  rtc.channelRtm.on("ChannelMessage", function (sentMessage, senderId) {
    console.log("AgoraRTM client got message: " + JSON.stringify(sentMessage) + " from " + senderId);

    console.log(sentMessage.text == options.uid + ":leave");
    if (sentMessage.text == options.uid + ":leave"){
      leave();
      logoutRtm();
    }

  });
}

動作確認

  1. 1拠点目が入室します。
  2. 2拠点目が入室します。
  3. 1拠点目からLEAVE(*下記イメージ参照)ボタンをクリックします。
  4. 2拠点目が1拠点目からのメッセージを受信後、退室します。

<サンプル画面/コンソール(F12)>
・1拠点目(LEAVEボタンクリック時)

・2拠点目(退室時)

3.Tokenの有効期限で追い出す方法

Tokenの有効期限が切れた際に追いだす方法です。
※agora.ioのTokenについて詳しく知りたい方はagora.io の Security Key についてをご参照ください。

サンプル

サンプルの「CASE3_Token」を利用します。

Token取得方法

1.Tokenを取得するagoraToken取得用サンプルコード(PHP)をダウンロードします。

2./sample配下にあるRtcTokenBuilderSample.phpに値を設定します。

RtcTokenBuilderSample.php
$appID = "*Consoleより取得&設定*";
$appCertificate = "*Consoleより取得&設定*";
$channelName = "demo";
$uid = 12345;
$uidStr = "12345";
$expireTimeInSeconds = 60;

3.http実行環境でphpを実行します。
レスポンスとしてTokenが画面に出力されます。(それを利用します)

実装

index.js
function handleTokenPrivilegeDidExpire() {
    leave();
    console.log("onTokenPrivilegeDidExpire")
}

動作確認

  1. Tokenを取得します。
  2. TokenでChannelに入室します。(uid:12345)
  3. Token有効期限が切れ、退室します(追い出されます)。

<サンプル画面/コンソール(F12)>

4.RESTFul APIで追い出す方法

RESTFul API(kicking-rule)をコールして追い出す方法になります。

※agoraのRESTFul APIをご存知ない方はagora.io Dashboard RESTful APIの利用例をご参照ください。

サンプル

サンプルの「CASE4_RESTfulAPI」を利用します。

RESTful API

RESTFul APIのBan Users at the Server(ユーザーの入室制限)を利用します。

このAPIをコールすると、指定したChannelへの入室が一定時間禁止されます。
Channel(必須)とユーザID、IPアドレスの粒度で指定できます。
(*各Recording SDKの録画用ユーザ(uid)を追い出しもできます)

実装

index.j
function handleConnectionStateChange(curState,revState,reason) {
  console.log(curState + ":" + reason);
  //ユーザ入室制限
  if (reason == "UID_BANNED"){
    leave();
  }
}
banrule.php
<?php
require 'params.php';

$url = $baseUrl.'/v1/kicking-rule/';

$params = [
  'appid' => '***',   //APPID
  'cname' => 'demo',  //Channel名
  'uid' => '',  //ユーザID
  'ip' => '',   //IPアドレス
  'time' => 3,
  'privileges' => ['join_channel']
];
$json_enc = json_encode($params);

$header = array();
$header[] = 'Content-type: application/json;charset=utf-8';
$header[] = 'Authorization: Basic '.base64_encode($plainCredentials);

$curl = curl_init($url);
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_HTTPHEADER, $header);
curl_setopt($curl, CURLOPT_POSTFIELDS, $json_enc);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
var_dump($response);

curl_close($curl);

動作確認

  1. Channelに入室します。
  2. banrule.phpをコールします。
  3. Channelから退室します(追い出されます)。
  4. 再度Channelに入室しようとしても、入室制限中は、入室できません。

<サンプル画面/コンソール(F12)>
・banrule.phpコール時(追いだし)

・入室禁止中(再入室不可)

最後に

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

8
5
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
8
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?