2022年05月19日

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

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

 

パターンとしては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コール時(追いだし)
  • 入室禁止中(再入室不可)

ガイドブックダウンロード

【すぐ読める!ガイドブック】ビデオ通話・ライブ配信SDK「Agora」

【大充実】通話・配信SDK「Agora」ガイドブック

通話・配信サービス開発や、配信技術のリプレイスを検討中の方、必見の内容です。
Agora SDKの特徴から活用例まで徹底解説!

無料ダウンロード
ブイキューブ

執筆者ブイキューブ

Agoraの日本総代理店として、配信/通話SDKの提供だけでなく、導入支援から行い幅広いコミュニケーションサービスに携わっている。

関連記事

先頭へ戻る