无法连接到 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 SDK:https://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
方法需要 apiKey
和 sessionId
而不仅仅是 apiKey
.
connect
方法只需要 token
而不是 apiKey
,并且 token
.
initPublisher
方法不需要apiKey
。
addEventListener
方法已被弃用,请使用.on
设置事件监听器。
有关网络示例的更多信息,请参阅以下示例project。
我正在尝试将视频通话集成到我使用 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 SDK:https://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
方法需要apiKey
和sessionId
而不仅仅是apiKey
.connect
方法只需要token
而不是apiKey
,并且token
.initPublisher
方法不需要apiKey
。addEventListener
方法已被弃用,请使用.on
设置事件监听器。
有关网络示例的更多信息,请参阅以下示例project。