与OpenTok 1:1对话的麻烦

时间:2015-04-16 14:59:32

标签: javascript jquery opentok

我正在尝试跨浏览器进行1:1的opentok对话。

有两个角色:
一个邀请的出版商和一个被邀请者。目的是让这两者进行1:1的对话。

正确地建立会话并且被邀请者连接到流。被邀请者接收发布者的视频流并将其添加到其容器中。然后他开始发布到同一个会话。
因此被邀请者现在可以看到两个视频。(是的)......

但是,发布商只能看到他自己的视频。我完全无法发现被邀请者发布的信息流。

出版商的职能是什么:

function startVideoHost(sessionId, apiKey, token) {
    var replacementElementId = "localVideo";
   if (OT.checkSystemRequirements() == 1) {
    publisher = OT.initPublisher(replacementElementId);
    publisher.on({
        streamCreated: function (event) {
            $('.videoWindow').show();
            console.log("Publisher started streaming.");
        },
        streamDestroyed: function (event) {
            console.log("Publisher stopped streaming. Reason: "
               + event.reason);
        }
    });

// this is kinda where id hope the publisher would detect the guest stream

     session = OT.initSession(apiKey, sessionId);
    session.on("streamCreated", function(event) {
    session.subscribe(event.stream, remoteVideos);
  });
    session.connect(token, function (error) {
        if (session.capabilities.publish == 1) {
            session.publish(publisher);
        } else {
            console.log("You cannot publish an audio-video stream.");
        }
    });
} else {
    console.log("The client does not support WebRTC.");
}
}

受邀者的功能如下:

function startVideoGuest(sessionId, apiKey, token) {
    if (OT.checkSystemRequirements() == 1) {
    var session = OT.initSession(apiKey, sessionId);
    session.on("streamCreated", function(event) {
    session.subscribe(event.stream, remoteVideos);
  });
  session.connect(token, function(error) {
    if (error) {
      console.log("Error connecting: ", error.code, error.message);
    } else {
        $('.videoWindow').show();
        var replacementElementId = "localVideo";
        publisher = OT.initPublisher(replacementElementId);
        publisher.on({
            streamCreated: function (event) {
            console.log("Publisher started streaming.");
        },
        streamDestroyed: function (event) {
            console.log("Publisher stopped streaming. Reason: "
               + event.reason);
        }
    });
        console.log("Connected to the session.");
    }
  });
}

}  

有没有人知道为什么我没有让被邀请者的视频流回到发布者那里?

1 个答案:

答案 0 :(得分:1)

我可以看到的一个问题是'被邀请者'呼叫OT.initPublisher(),它会触发被邀请者网络摄像头开始录制视频并在被邀请者的DOM中显示该流,但受邀者实际上从未将该网络摄像头发布到会话中。这就是被邀请者可以在浏览器中看到视频的原因,但“主持人”从未在会话中看到该视频。

一种解决方案是在session.publish(publisher)的{​​{1}}回调中调用session.connect。我修改了下面的代码:

function startVideoGuest

一个澄清:只要会话中的客户发送视频和/或音频,他们就是发布者。由于您似乎需要“被邀请者”向“主持人”发送视频,“被邀请者”也是发布商,必须致电//..... streamDestroyed: function (event) { console.log("Publisher stopped streaming. Reason: " + event.reason); } }); console.log("Connected to the session."); //I have added the line below session.publish(publisher); //...... 。客户可以同时是发布者和订阅者。它们是可选属性,而不是独占角色。