我正在尝试跨浏览器进行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.");
}
});
}
}
有没有人知道为什么我没有让被邀请者的视频流回到发布者那里?
答案 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);
//......
。客户可以同时是发布者和订阅者。它们是可选属性,而不是独占角色。