取消发布发布者并尝试在不工作后立即发布

Unpublishing a publisher and trying to publish right after not working

我在浏览器中使用 tokbox javascript SDK。 我在重新创建发布者时遇到问题。我的情况是这样的:

  1. 我创建了一个广播音频和视频的发布者
  2. 在某个时刻,我想将音频源切换到不同的 MediaStream 源。
  3. 我在会话中取消发布之前的发布者并在回调中销毁它
  4. 我尝试用这个新配置创建一个新的发布者。

即使我这样做,我也会遇到以下错误:

Session.publish, could not publish in a reasonable amount of time.

我在 SO 和网上搜索了一些答案。我有 运行 遇到类似问题的人,例如 this or 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, …}

此处为 TokBox 开发人员布道师。

当您销毁发布者时,我们会在 MediaStreamTrack which is why you're unable to use the same MediaStreamTrack options again. To prevent this from happening, call the clone method on the MediaStreamTrack 上调用 stop 方法,并在您初始化发布者时将克隆作为选项传入。