お問い合わせ ・資料請求

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

  • WebRTC
  • REST-API
  • RTM
  • token
  • Agora.io

概要

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

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

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

サンプル

以降は、バージョン4用サンプルで説明しています。

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で追い出す方法

サンプル

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

RESTful API

この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 SDK イメージ
Agora SDK

大規模・安価・すぐに使える
ライブ配信・ビデオ通話・音声通話SDK

 

Agoraに関するお問い合わせ

03-4405-2688

受付時間:平日10:00〜18:00

先頭へ戻る