我在浏览器中使用tokbox javascript sdk。 我无法重新创建发布商。我的情况是这样的:
当我这样做时,我最终得到以下错误:
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, …}
答案 0 :(得分:3)
TokBox Developer Evangelist在这里。
当您销毁发布商时,我们会在MediaStreamTrack
上调用stop
方法,这就是您无法再次使用相同的MediaStreamTrack
选项的原因。要防止这种情况发生,请在MediaStreamTrack
上调用clone
方法,并在初始化发布者时将克隆作为选项传递。