RTCMultiConnection V3.0 如何在一个页面中添加多个聊天室
How can I add multiple chat rooms in RTCMultiConnection V3.0 in a single page
我想在一个页面上创建多个聊天室,用户可以在其中 video/audio/text 为不同的房间聊天。我已经完成了一个单一的,但我对在单个页面上的连接不太了解。
我正在使用 RTCMultiConnection V3.0 用于单个聊天室。
我想实现下图中提到的。
谁能帮我实现这个目标?
要么使用多个 RTCMultiConnection 实例:
var room1 = new RTCMultiConnection();
var room2 = new RTCMultiConnection();
var room3 = new RTCMultiConnection();
room1.join('room1-unique-ID');
room2.join('room2-unique-ID');
room3.join('room3-unique-ID');
或者使用这个技巧:
connection.session.broadcast = true;
connection.open('each-user-unique-id'); // each user should call this
现在每个用户都可以加入任何房间:
connection.join('first-room');
connection.join('second-room');
connection.join('third-room');
记住,我们在上面设置了{broadcast:true}
;这意味着 join
方法只允许您加入房间 owner/moderator/initiator.
你需要请房间管理员给你他所有参与者的名单。
var alreadyGivedParticipants = {};
connection.onPeerStateChanged = function(state) {
if (state.iceConnectionState !== 'connected') return; // ignore
if (alreadyGivedParticipants[state.userid]) return;
alreadyGivedParticipants[state.userid] = true; // to make sure we don't duplicate
connection.socket.emit(connection.socketCustonEvent, {
participants: connection.getAllParticipants(),
onlyForThisUser: state.userid
});
};
connection.connectSocket(function() {
connection.socket.on(connection.socketCustonEvent, function(message) {
if (message.onlyForThisUser !== connection.userid) return; // ignore
message.participants.forEach(function(pid) {
connection.join(pid); // join all room participants
});
});
});
您甚至可以将每个新用户的信息提供给现有参与者。
var alreadyGivedParticipants = {};
connection.onPeerStateChanged = function(state) {
if (state.iceConnectionState !== 'connected') return; // ignore
if (alreadyGivedParticipants[state.userid]) return;
alreadyGivedParticipants[state.userid] = true; // to make sure we don't duplicate
connection.socket.emit(connection.socketCustonEvent, {
participants: connection.getAllParticipants(),
onlyForThisUser: state.userid
});
// below block shares new user with existing participants
connection.getAllParticipants().forEach(function(existingUser) {
connection.socket.emit(connection.socketCustonEvent, {
participants: [state.userid],
onlyForThisUser: existingUser
});
});
};
connection.connectSocket(function() {
connection.socket.on(connection.socketCustonEvent, function(message) {
if (message.onlyForThisUser !== connection.userid) return; // ignore
message.participants.forEach(function(pid) {
connection.join(pid); // join all room participants
});
});
});
您可以使用 getPublicModerators method to get list of all public rooms. A live demo.
使用 PHP 创建房间列表比使用 rtcmulti...publicModarator 更容易,只需使用 id、opener、joiner、stat、timejoin 创建一个 table(room)。
使用 Ajax 代码在 table 中写入 initiator'name 并在主文件本身中访问它,为加入者创建一个单独的文件,它只会显示那些已经 openef/streamed.
对于 multiroom/catagory,您还需要一个变量 "type" 然后使用带有搜索机制的精确 mysql !!!
我想在一个页面上创建多个聊天室,用户可以在其中 video/audio/text 为不同的房间聊天。我已经完成了一个单一的,但我对在单个页面上的连接不太了解。
我正在使用 RTCMultiConnection V3.0 用于单个聊天室。
我想实现下图中提到的。
谁能帮我实现这个目标?
要么使用多个 RTCMultiConnection 实例:
var room1 = new RTCMultiConnection();
var room2 = new RTCMultiConnection();
var room3 = new RTCMultiConnection();
room1.join('room1-unique-ID');
room2.join('room2-unique-ID');
room3.join('room3-unique-ID');
或者使用这个技巧:
connection.session.broadcast = true;
connection.open('each-user-unique-id'); // each user should call this
现在每个用户都可以加入任何房间:
connection.join('first-room');
connection.join('second-room');
connection.join('third-room');
记住,我们在上面设置了{broadcast:true}
;这意味着 join
方法只允许您加入房间 owner/moderator/initiator.
你需要请房间管理员给你他所有参与者的名单。
var alreadyGivedParticipants = {};
connection.onPeerStateChanged = function(state) {
if (state.iceConnectionState !== 'connected') return; // ignore
if (alreadyGivedParticipants[state.userid]) return;
alreadyGivedParticipants[state.userid] = true; // to make sure we don't duplicate
connection.socket.emit(connection.socketCustonEvent, {
participants: connection.getAllParticipants(),
onlyForThisUser: state.userid
});
};
connection.connectSocket(function() {
connection.socket.on(connection.socketCustonEvent, function(message) {
if (message.onlyForThisUser !== connection.userid) return; // ignore
message.participants.forEach(function(pid) {
connection.join(pid); // join all room participants
});
});
});
您甚至可以将每个新用户的信息提供给现有参与者。
var alreadyGivedParticipants = {};
connection.onPeerStateChanged = function(state) {
if (state.iceConnectionState !== 'connected') return; // ignore
if (alreadyGivedParticipants[state.userid]) return;
alreadyGivedParticipants[state.userid] = true; // to make sure we don't duplicate
connection.socket.emit(connection.socketCustonEvent, {
participants: connection.getAllParticipants(),
onlyForThisUser: state.userid
});
// below block shares new user with existing participants
connection.getAllParticipants().forEach(function(existingUser) {
connection.socket.emit(connection.socketCustonEvent, {
participants: [state.userid],
onlyForThisUser: existingUser
});
});
};
connection.connectSocket(function() {
connection.socket.on(connection.socketCustonEvent, function(message) {
if (message.onlyForThisUser !== connection.userid) return; // ignore
message.participants.forEach(function(pid) {
connection.join(pid); // join all room participants
});
});
});
您可以使用 getPublicModerators method to get list of all public rooms. A live demo.
使用 PHP 创建房间列表比使用 rtcmulti...publicModarator 更容易,只需使用 id、opener、joiner、stat、timejoin 创建一个 table(room)。 使用 Ajax 代码在 table 中写入 initiator'name 并在主文件本身中访问它,为加入者创建一个单独的文件,它只会显示那些已经 openef/streamed.
对于 multiroom/catagory,您还需要一个变量 "type" 然后使用带有搜索机制的精确 mysql !!!