如何使用opentok断开客户端与会话的连接?

时间:2019-05-21 04:24:36

标签: javascript opentok tokbox

每当我调用session.disconnect()方法从会话中删除客户端时,都会收到以下警告:“ OpenTok:Publisher:warn收到的连接事件:”取消“而没有”尝试“

和此错误:“ OpenTok:Subscriber:error无效的状态转换:事件'disconnect'在状态'disconnected'下不可能“

有人可以向我解释该错误是什么意思吗?预先感谢。


// Initialize the session
      var session = OT.initSession(data['apikey'], data['session_id']);
      console.log(session);

      // Initialize the publisher for the recipient
      var publisherProperties = {insertMode: "append", width: '100%', height: '100%'};
      var publisher = OT.initPublisher('publisher', publisherProperties, function (error) {
        if (error) {
          console.log(`Couldn't initialize the publisher: ${error}`);
        } else {
          console.log("Receiver publisher initialized.");
        }
      });
      $('#session-modal').modal("show");

      // Detect when new streams are created and subscribe to them.
      session.on("streamCreated", function (event) {
        console.log("New stream in the session");
        var subscriberProperties = {insertMode: 'append', width: '100%', height: '100%'};
        var subscriber = session.subscribe(event.stream, 'subscriber', subscriberProperties, function(error) {
          if (error) {
            console.log(`Couldn't subscribe to the stream: ${error}`);
          } else {
            console.log("Receiver subscribed to the sender's stream");
          }
        });
      });

      //When a stream you publish leaves a session, the Publisher object dispatches a streamDestroyed event:
      publisher.on("streamDestroyed", function (event) {
        console.log("The publisher stopped streaming. Reason: "
        + event.reason);

      });

      //When a stream, other than your own, leaves a session, the Session object dispatches a streamDestroyed event:
      session.on("streamDestroyed", function (event) {
        console.log("Stream stopped. Reason: " + event.reason);
        session.disconnect();
        console.log("called session.disconnect().");


      });


      session.on({
        connectionCreated: function (event) {
          connectionCount++;
          if (event.connection.connectionId != session.connection.connectionId) {
            console.log(`Another client connected. ${connectionCount} total.`);
          }
        },
        connectionDestroyed: function connectionDestroyedHandler(event) {
          connectionCount--;
          console.log(`A client disconnected. ${connectionCount} total.`);
        }
      });

      // Connect to the session
      // If the connection is successful, publish an audio-video stream.
      session.connect(data['token'], function(error) {
        if (error) {
          console.log("Error connecting to the session:", error.name, error.message);
        } else {
          console.log("Connected to the session.");
          session.publish(publisher, function(error) {
            if (error) {
              console.log(`couldn't publish to the session: ${error}`);
            } else {
              console.log("The receiver is publishing a stream");
            }
          });
        }
      });

      // Stop the publisher from streaming to the session if the user dismiss the modal
      const stopSession = document.getElementById('stop-session');
      stopSession.addEventListener("click", (event) => {
        event.preventDefault();
        session.disconnect();
      });


2 个答案:

答案 0 :(得分:2)

我看到这有点陈旧,但想分享我的解决方案以避免此错误。我不确定该错误意味着什么,但是我在调​​用session.disconnect()之前先调用Publisher.destroy()以避免该错误。

openTokPublisher.destroy();
openTokSession.disconnect();

答案 1 :(得分:0)

我非常怀疑您是否可以使用JavaScript断开客户端的连接。这是我做的。

// Connect to the session
session.connect(token, function connectCallback(error) {
 // Get the connectionId
    connectionId = session.connection.connectionId;

并在后端使用其SDK之一 https://tokbox.com/developer/sdks/server/

// Disconnect session
function disconnectSession() { // eslint-disable-line no-unused-vars
 if (sessionId && connectionId) {
    $.ajax({
        url: '/OpenTok/DisconnectSession',
        type: 'POST',
        data: 'sessionId=' + sessionId + '&connectionId=' + connectionId,
    });
   }
}