<!DOCTYPE html>
|
<html>
|
<head>
|
<meta charset="UTF-8">
|
<title>Jitsi Room</title>
|
<link rel="stylesheet" type="text/css" href="styles.css">
|
<script src="libs/jquery-3.5.1.min.js"></script>
|
<script src="libs/lib-jitsi-meet.min.js"></script>
|
<script src="xmppconfig.js" ></script>
|
<link rel="icon" type="image/ico" href="jitsi.ico" />
|
</head>
|
<body>
|
XMPP Url:<input id="xmppServer" type="text" size="50" />
|
Room id:<input id="xmppRoom" type="text" />
|
<a href="#" onclick="load()">Load</a>
|
<a href="#" onclick="unload()">Unload</a>
|
<br/>
|
</body>
|
<script>
|
// set default value
|
document.querySelector('#xmppServer').value = xmppRoomConfig.url;
|
document.querySelector('#xmppRoom').value = xmppRoomConfig.roomId;
|
|
let connection = null;
|
let remoteTracks = {};
|
|
function onRemoteAddTrack(track) {
|
console.log(`onRemoteAddTrack track ${track}`);
|
if (!track.isLocal()) {
|
const participant = track.getParticipantId();
|
remoteTracks[participant].push(track);
|
if (track.getType() === 'video') {
|
$('body').append(`<div title='${participant}' onclick="kick('${participant}')"><video autoplay='1' id='${participant}'" /></div>`);
|
} else {
|
$('body').append(`<audio autoplay='1' id='${participant}' />`);
|
}
|
track.attach($(`#${participant}`)[0]);
|
}
|
}
|
|
function onRemoteRemoveTrack(track) {
|
console.log(`onRemoteRemoveTrack track ${track}`);
|
if (!track.isLocal()) {
|
const participant = track.getParticipantId();
|
const tracks = remoteTracks[participant];
|
if (tracks) {
|
for (let i = 0; i < tracks.length; i++) {
|
tracks[i].detach($(`#${participant}`)[0]);
|
$(`#${participant}`).remove();
|
tracks[i].dispose();
|
}
|
delete remoteTracks[participant];
|
}
|
}
|
}
|
|
function onUserLeft(id) {
|
console.log('user left id:' + id);
|
}
|
|
function onUserJoined(id) {
|
console.log('user joined id:' + id);
|
remoteTracks[id] = [];
|
remoteTracks[id].length = 0;
|
}
|
|
function onConnectionSuccess() {
|
connection.room = connection.initJitsiConference(connection.roomName, {});
|
|
connection.room.on(JitsiMeetJS.events.conference.USER_JOINED, onUserJoined);
|
connection.room.on(JitsiMeetJS.events.conference.USER_LEFT, onUserLeft);
|
|
connection.room.on(JitsiMeetJS.events.conference.TRACK_ADDED, onRemoteAddTrack);
|
connection.room.on(JitsiMeetJS.events.conference.TRACK_REMOVED, onRemoteRemoveTrack);
|
|
connection.room.join();
|
}
|
|
function onConnectionFailed() {
|
console.error('Connection Failed!');
|
}
|
|
function disconnect() {
|
console.log('disconnect!');
|
if (connection) {
|
connection.removeEventListener(JitsiMeetJS.events.connection.CONNECTION_ESTABLISHED, onConnectionSuccess);
|
connection.removeEventListener(JitsiMeetJS.events.connection.CONNECTION_FAILED, onConnectionFailed);
|
connection.removeEventListener(JitsiMeetJS.events.connection.CONNECTION_DISCONNECTED, disconnect);
|
}
|
}
|
|
function kick(paticipant) {
|
if (connection && connection.room) {
|
console.log("kick:" + paticipant)
|
connection.room.kickParticipant(paticipant);
|
}
|
}
|
|
function join(serverUrl, roomName) {
|
JitsiMeetJS.setLogLevel(JitsiMeetJS.logLevels.DEBUG);
|
JitsiMeetJS.init({});
|
|
const options = {
|
hosts: {
|
domain: serverUrl,
|
muc: 'conference.' + serverUrl
|
},
|
bosh: 'https://' + serverUrl + '/http-bind?room='+roomName
|
};
|
|
var connection = new JitsiMeetJS.JitsiConnection(null, null, options);
|
connection.roomName = roomName;
|
|
connection.addEventListener(JitsiMeetJS.events.connection.CONNECTION_ESTABLISHED, onConnectionSuccess);
|
connection.addEventListener(JitsiMeetJS.events.connection.CONNECTION_FAILED, onConnectionFailed);
|
connection.addEventListener(JitsiMeetJS.events.connection.CONNECTION_DISCONNECTED, disconnect);
|
|
connection.connect();
|
|
return connection;
|
}
|
|
function load() {
|
var serverName = document.querySelector('#xmppServer').value;
|
var roomName = document.querySelector('#xmppRoom').value;
|
connection = join(serverName, roomName);
|
}
|
|
function unload() {
|
if (connection) {
|
if (connection.room) {
|
connection.room.leave();
|
connection.room = null;
|
}
|
connection.disconnect();
|
connection = null;
|
}
|
}
|
|
$(window).bind('load', load);
|
$(window).bind('beforeunload', unload);
|
|
</script>
|
</html>
|