无法连接到 OpenTok。响应代码:创建会话时身份验证失败

Failed to connect to OpenTok. Response code: Authentication failed while creating a session

我正在尝试将视频通话集成到我使用 Rails 和 opentok 上的 Ruby 实现的 Web 应用程序。目前,该应用会为 "Create Session" 抛出错误 无法连接到 OpenTok。响应代码:创建会话时身份验证失败。 API 密钥:3548532

class RoomsController < ApplicationController
before_filter :config_opentok,:except => [:index]

require "opentok"

def index
  @rooms = Room.where(:public => true).order("created_at DESC")
  @new_room = Room.new
end

def create
  api_key = "3548532"       # Replace with your OpenTok API key.
  api_secret = "my secret key"  # Replace with your OpenTok API secret.

  opentok = OpenTok::OpenTok.new api_key, api_secret
  session = opentok.create_session :media_mode => :routed
  session_id = session.session_id
  params[:room][:sessionId] = session.session_id

  @new_room = Room.new(params[:room])

  respond_to do |format|
    if @new_room.save
      format.html { redirect_to("/party/"+@new_room.id.to_s) }
    else
      format.html { render :controller => ‘rooms’, :action => “index” }
    end
  end
end

def party
  @room = Room.find(params[:id])

  @tok_token = @opentok.generate_token @room.sessionId 
end

end

Party.html.erb:

 <div id="invitation">Invite your friends! Share the url of this page http://localhost:3030/party/<%= @room.id %></div>
<div id="videobox">

</div>
<script src="http://static.opentok.com/v0.91/js/TB.min.js" type="text/javascript"></script>
<script type="text/javascript">
    var apiKey =  3548532;
    var sessionId = "<%= @room.sessionId %>";
    var token = "<%= @tok_token %>";

    var session;


TB.setLogLevel(TB.DEBUG);
//session.connect(apiKey, token);
   var session = TB.initSession(sessionId);
    session.addEventListener('sessionConnected', sessionConnectedHandler);
    session.addEventListener('streamCreated', streamCreatedHandler);
    session.connect(apiKey, token);


 var publisher;
    function sessionConnectedHandler(event) {
      publisher = TB.initPublisher(apiKey, 'videobox');
      session.publish(publisher);

      // Subscribe to streams that were in the session when we connected
      subscribeToStreams(event.streams);
    }

    function streamCreatedHandler(event) {
      // Subscribe to any new streams that are created
      subscribeToStreams(event.streams);
    }

    function subscribeToStreams(streams) {
      for (var i = 0; i < streams.length; i++) {
        // Make sure we don't subscribe to ourself
        if (streams[i].connection.connectionId == session.connection.connectionId) {
          return;
        }

        // Create the div to put the subscriber element in to
        var div = document.createElement('div');
        div.setAttribute('id', 'stream' + streams[i].streamId);
        document.body.appendChild(div);

        // Subscribe to the stream
        session.subscribe(streams[i], div.id);
      }
    }
</script>

为什么认证失败? 我尝试按照 https://github.com/loganathan-s/vide0-chat-using-tokbox

的说明进行操作

谢谢

这里是 TokBox 开发者布道师。

根据您共享的示例应用程序,您使用的似乎是已弃用的 OpenTok JS SDK 版本 (v0.91)。

这是 link 到最新的 OpenTok JS SDKhttps://static.opentok.com/v2/js/opentok.min.js

请尝试使用以下代码创建会话、连接、发布和订阅:

const session = OT.initSession(apiKey, sessionId);
const publisher = OT.initPublisher();

session.on({
  streamCreated: event => {
    session.subscribe(event.stream);
  },
  sessionConnected: event => {
    session.publish(publisher);
  },
});

session.connect(token, (err) => {
  if (err) {
    console.log(`There was an error connecting to the session: ${err}`);
  }
});

请注意以下关键变化:

  • 用于引用 OpenTok 对象的全局变量是 OT 而不是 TB
  • initSession 方法需要 apiKeysessionId 而不仅仅是 apiKey.
  • connect 方法只需要 token 而不是 apiKey,并且 token.
  • initPublisher方法不需要apiKey
  • addEventListener方法已被弃用,请使用.on设置事件监听器。

有关网络示例的更多信息,请参阅以下示例project