【发布时间】:2018-05-22 05:18:29
【问题描述】:
我在浏览器中使用 tokbox javascript sdk。 我无法重新创建发布者。我的情况是这样的:
- 我创建了一个广播音频和视频的发布者
- 在某个时刻,我想将音频源切换到不同的 MediaStream 源。
- 我在会话中取消发布之前的发布者并在回调中销毁它
- 我尝试使用这个新配置创建一个新发布者。
当我这样做时,我最终会出现以下错误:
Session.publish, could not publish in a reasonable amount of time.
我在 SO 和网上搜索了一些答案。我遇到过类似问题的人,例如this 或this,但他们都没有这个问题的答案。
基本上,我要么需要找出如何更改已经在广播的现有发布者(在音频和视频源配置方面),要么我在尝试更改发布者的生命周期时做错了什么创建一个新的。
在拥有第一个发布者的同时创建第二个发布者似乎可以正常工作,但首先销毁一个发布者然后尝试创建一个新发布者似乎会产生所描述的问题。
这里是示例代码:
// returns existing publisher
const existing = selectPublisher(getState());
if (existing) {
session.unpublish(existing);
existing.destroy();
console.log('destroyed.');
}
const publisher = OT.initPublisher(
'publisher-container',
finalOptions,
error => {
console.log(error);
}
);
session.publish(publisher, error => {
console.log(error);
});
发布者的初始化似乎工作,它打印undefined。
打印结果为:
index.js:2177 OT.Publisher.onPublishingTimeout
index.js:2177 OT.exception :: title: Unable to Publish (1500) msg: ICEWorkflow
index.js:2177 1500 "Session.publish :: Could not publish in a reasonable amount of time"
我使用的是 opentok npm 客户端包版本 2.14.2
编辑:
问题似乎是由我传递给发布者的选项引起的,如果我只使用默认选项(不传递任何给发布者),上面的示例就可以正常工作。
我正在使用两个MediaStreamTrack 对象,一个用于音频和视频,使用OT.getUserMedia(options) 收集。看起来它第一次运行良好,但是当我使用相同的两个 MediaStreamTrack 对象取消发布和重新发布时,我遇到了这个问题。
我传递给它的对象看起来像这样(来自 chrome 控制台):
audioSource: MediaStreamTrack {kind: "audio", id: "9414787b-82b9-48c3-99bd-3208b46c2f9f", label: "Built-in Microphone", enabled: true, muted: false, …}
videoSource: MediaStreamTrack {kind: "video", id: "3f20c926-7d0c-4537-8e8d-ef4b22393a58", label: "FaceTime HD Camera", enabled: true, muted: false, …}
【问题讨论】:
-
Bob,您能否提供以下信息: - 您正在使用的示例代码 - OpenTok JS SDK 的版本 - 您正在使用的浏览器
-
我用您要求的信息更新了原始帖子。
-
Bob,能否请您升级到 2.14.2 SDK 看看是否还有问题?另外,能告诉我你用的是什么浏览器吗?最后,您可以在创建发布者和调用发布时添加错误处理程序吗?这样我们就可以看到错误处理程序返回了什么。
-
我将软件包升级到 2.14.2,但似乎我仍然遇到问题。我在 chrome 版本 66.0.3359.139 中进行了测试。我还添加了错误处理程序,它返回的错误与我上面描述的完全相同,我会将其添加到原始帖子中。
-
看起来我在 Firefox 甚至 safari 上也遇到了同样的问题,顺便说一下,我正在使用 mac OSX。
标签: javascript webrtc opentok tokbox