uyem
Version:
WebRTC client-server SFU application
339 lines • 12.6 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getCountVideos = exports.getVideoShifts = exports.createEpisodes = exports.getVideoTime = exports.createVideoChunks = exports.TOKEN_QUERY_NAME = exports.EXT_WEBM = exports.VIDEO_BACKGROUNDS_PATH = exports.RECORD_VIDEOS_PATH = exports.TEMPORARY_PATH = exports.DELIMITER = exports.Data = exports.Connection = exports.Signaling = exports.LocaleSelector = exports.LocaleDefault = exports.Locale = exports.MessageType = exports.RecordCommand = exports.LogLevel = exports.ErrorCode = void 0;
const path_browserify_1 = __importDefault(require("path-browserify"));
var ErrorCode;
(function (ErrorCode) {
ErrorCode["initial"] = "initial";
ErrorCode["roomIsInactive"] = "roomIsInactive";
ErrorCode["errorSendMessage"] = "errorSendMessage";
ErrorCode["youAreBanned"] = "youAreBanned";
ErrorCode["videoRecordStop"] = "videoRecordStop";
ErrorCode["forbidden"] = "forbidden";
ErrorCode["notAuthorised"] = "notAuthorised";
ErrorCode["duplicateTab"] = "duplicateTab";
ErrorCode["errorDeleteMessage"] = "errorDeleteMessage";
ErrorCode["errorSetAdmin"] = "errorSetAdmin";
ErrorCode["errorToBan"] = "errorToBan";
ErrorCode["errorToMute"] = "errorToMute";
ErrorCode["errorToOffCamera"] = "errorToOffCamera";
ErrorCode["badRequest"] = "badRequest";
ErrorCode["notFound"] = "notFound";
ErrorCode["serverError"] = "serverError";
})(ErrorCode = exports.ErrorCode || (exports.ErrorCode = {}));
// eslint-disable-next-line no-unused-vars
var LogLevel;
(function (LogLevel) {
// eslint-disable-next-line no-unused-vars
LogLevel[LogLevel["log"] = 0] = "log";
// eslint-disable-next-line no-unused-vars
LogLevel[LogLevel["info"] = 1] = "info";
// eslint-disable-next-line no-unused-vars
LogLevel[LogLevel["warn"] = 2] = "warn";
// eslint-disable-next-line no-unused-vars
LogLevel[LogLevel["error"] = 3] = "error";
})(LogLevel = exports.LogLevel || (exports.LogLevel = {}));
var RecordCommand;
(function (RecordCommand) {
RecordCommand["start"] = "start";
RecordCommand["stop"] = "stop";
})(RecordCommand = exports.RecordCommand || (exports.RecordCommand = {}));
// eslint-disable-next-line no-shadow
var MessageType;
(function (MessageType) {
MessageType["GET_USER_ID"] = "GET_USER_ID";
MessageType["SET_USER_ID"] = "SET_USER_ID";
MessageType["GET_LOGIN"] = "GET_LOGIN";
MessageType["TOKEN"] = "TOKEN";
MessageType["OFFER"] = "OFFER";
MessageType["CANDIDATE"] = "CANDIDATE";
MessageType["ANSWER"] = "ANSWER";
MessageType["GET_ROOM"] = "GET_ROOM";
MessageType["SET_ROOM"] = "SET_ROOM";
MessageType["GET_CHAT_UNIT"] = "GET_CHAT_UNIT";
MessageType["GET_SETTINGS_UNIT"] = "GET_SETTINGS_UNIT";
MessageType["SET_ERROR"] = "SET_ERROR";
MessageType["GET_ROOM_GUESTS"] = "GET_ROOM_GUESTS";
MessageType["SET_ROOM_GUESTS"] = "SET_ROOM_GUESTS";
MessageType["SET_CHANGE_UNIT"] = "SET_CHANGE_UNIT";
MessageType["GET_MUTE"] = "GET_MUTE";
MessageType["SET_MUTE"] = "SET_MUTE";
MessageType["GET_NEED_RECONNECT"] = "GET_NEED_RECONNECT";
MessageType["GET_CLOSE_PEER_CONNECTION"] = "GET_CLOSE_PEER_CONNECTION";
MessageType["SET_CLOSE_PEER_CONNECTION"] = "SET_CLOSE_PEER_CONNECTION";
MessageType["GET_ROOM_MESSAGE"] = "GET_ROOM_MESSAGE";
MessageType["SET_ROOM_MESSAGE"] = "SET_ROOM_MESSAGE";
MessageType["SET_CHAT_UNIT"] = "SET_CHAT_UNIT";
MessageType["SET_SETTINGS_UNIT"] = "SET_SETTINGS_UNIT";
MessageType["GET_CHAT_MESSAGES"] = "GET_CHAT_MESSAGES";
MessageType["SET_CHAT_MESSAGES"] = "SET_CHAT_MESSAGES";
MessageType["GET_EDIT_MESSAGE"] = "GET_EDIT_MESSAGE";
MessageType["SET_EDIT_MESSAGE"] = "SET_EDIT_MESSAGE";
MessageType["GET_CREATE_MESSAGE"] = "GET_CREATE_MESSAGE";
MessageType["SET_CREATE_MESSAGE"] = "SET_CREATE_MESSAGE";
MessageType["GET_CREATE_QUOTE"] = "GET_CREATE_QUOTE";
MessageType["SET_CREATE_QUOTE"] = "SET_CREATE_QUOTE";
MessageType["GET_DELETE_MESSAGE"] = "GET_DELETE_MESSAGE";
MessageType["SET_DELETE_MESSAGE"] = "SET_DELETE_MESSAGE";
MessageType["GET_TO_MUTE"] = "GET_TO_MUTE";
MessageType["GET_TO_BAN"] = "GET_TO_BAN";
MessageType["GET_TO_UNMUTE"] = "GET_TO_UNMUTE";
MessageType["GET_TO_UNBAN"] = "GET_TO_UNBAN";
MessageType["SET_BAN_LIST"] = "SET_BAN_LIST";
MessageType["SET_MUTE_LIST"] = "SET_MUTE_LIST";
MessageType["GET_RECORD"] = "GET_RECORD";
MessageType["SET_RECORDING"] = "SET_RECORDING";
MessageType["GET_VIDEO_FIND_MANY"] = "GET_VIDEO_FIND_MANY";
MessageType["SET_VIDEO_FIND_MANY"] = "SET_VIDEO_FIND_MANY";
MessageType["GET_VIDEO_FIND_FIRST"] = "GET_VIDEO_FIND_FIRST";
MessageType["SET_VIDEO_FIND_FIRST"] = "SET_VIDEO_FIND_FIRST";
MessageType["GET_ASK_FLOOR"] = "GET_ASK_FLOOR";
MessageType["SET_ASK_FLOOR"] = "SET_ASK_FLOOR";
MessageType["GET_MUTE_FOR_ALL"] = "GET_MUTE_FOR_ALL";
MessageType["SET_MUTE_FOR_ALL"] = "SET_MUTE_FOR_ALL";
MessageType["GET_BLOCK_CHAT"] = "GET_BLOCK_CHAT";
MessageType["SET_BLOCK_CHAT"] = "SET_BLOCK_CHAT";
MessageType["GET_VIDEO_TRACK"] = "GET_VIDEO_TRACK";
MessageType["SET_VIDEO_TRACK"] = "SET_VIDEO_TRACK";
MessageType["GET_TO_ADMIN"] = "GET_TO_ADMIN";
MessageType["SET_TO_ADMIN"] = "SET_TO_ADMIN";
MessageType["GET_VIDEO_SETTINGS"] = "GET_VIDEO_SETTINGS";
MessageType["SET_CREATE_VIDEO"] = "SET_CREATE_VIDEO";
MessageType["GET_VIDEO_DELETE"] = "GET_VIDEO_DELETE";
MessageType["SET_VIDEO_DELETE"] = "SET_VIDEO_DELETE";
MessageType["GET_VIDEO_UPDATE"] = "GET_VIDEO_UPDATE";
MessageType["SET_VIDEO_UPDATE"] = "SET_VIDEO_UPDATE";
MessageType["GET_LOCALE"] = "GET_LOCALE";
MessageType["SET_LOCALE"] = "SET_LOCALE";
})(MessageType = exports.MessageType || (exports.MessageType = {}));
var Locale;
(function (Locale) {
Locale.DEFAULT = 'en';
// Implements on packages/server/src/utils/lib.ts
Locale.SELECTOR = [
{
name: 'English',
value: 'en',
impl: true,
},
{
name: 'Русский',
value: 'ru',
impl: true,
},
];
})(Locale = exports.Locale || (exports.Locale = {}));
exports.LocaleDefault = Locale.DEFAULT;
exports.LocaleSelector = Locale.SELECTOR;
var Signaling;
(function (Signaling) {
class WSInterface {
delimiter = '_';
}
Signaling.WSInterface = WSInterface;
})(Signaling = exports.Signaling || (exports.Signaling = {}));
var Connection;
(function (Connection) {
class RTCInterface {
delimiter = '_';
}
Connection.RTCInterface = RTCInterface;
})(Connection = exports.Connection || (exports.Connection = {}));
var Data;
(function (Data) {
class DBInterface {
}
Data.DBInterface = DBInterface;
})(Data = exports.Data || (exports.Data = {}));
exports.DELIMITER = '_';
exports.TEMPORARY_PATH = 'tmp';
exports.RECORD_VIDEOS_PATH = 'videos';
exports.VIDEO_BACKGROUNDS_PATH = 'backgrounds';
exports.EXT_WEBM = '.webm';
exports.TOKEN_QUERY_NAME = 'token';
const createVideoChunks = ({ dir, dirPath, isBrowser, indexShift, }) => {
const chunks = [];
dir.forEach((item) => {
const peer = item.replace(exports.EXT_WEBM, '').split(exports.DELIMITER);
const start = parseFloat(peer[0]);
const end = parseFloat(peer[1]);
const id = peer[2];
const video = peer[3] === '1';
const audio = peer[4] === '1';
chunks.push({
id,
start,
end,
video,
audio,
width: parseInt(peer[5], 10),
height: parseInt(peer[6], 10),
fullPath: isBrowser ? path_browserify_1.default.join(dirPath, item) : path_browserify_1.default.resolve(dirPath, item),
map: '',
mapA: '',
});
});
return chunks
.sort((a, b) => {
if (a.start < b.start) {
return -1;
}
if (a.start === b.start) {
if (a.end < b.end) {
return -1;
}
}
return 1;
})
.map((item, index) => {
// eslint-disable-next-line @typescript-eslint/no-explicit-any
const _item = { ...item };
_item.index = index + (indexShift ? 1 : 0);
return _item;
});
};
exports.createVideoChunks = createVideoChunks;
const isEqual = (a, b) => {
let check = true;
if (a.length !== b.length) {
return false;
}
a.every((item, index) => {
const aKeys = Object.keys(item);
aKeys.every((_item) => {
if (item[_item] !== b[index]?.[_item]) {
check = false;
return false;
}
return true;
});
return check;
});
return check;
};
const getVideoTime = (chunks, all = false) => {
const min = all ? 0 : chunks[0]?.start || 0;
let max = 0;
chunks.forEach((item) => {
if (item.end > max) {
max = item.end;
}
});
return max - min;
};
exports.getVideoTime = getVideoTime;
const createEpisodes = ({ chunks }) => {
const episodes = [];
const endTime = (0, exports.getVideoTime)(chunks);
const time = (0, exports.getVideoTime)(chunks, true) * 10;
let oldChunks = [];
let from;
const array = new Array(time);
array.fill('').forEach((_, i) => {
const t = i / 10;
if (from === undefined) {
from = t;
}
const _chunks = [];
chunks.forEach((chunk) => {
if (chunk.start <= t && chunk.end > t) {
_chunks.push(chunk);
}
return true;
});
const isNew = oldChunks.length === 0;
if (!isEqual(_chunks, oldChunks) && !isNew) {
episodes.push({
start: from,
end: t,
video: false,
audio: false,
map: '',
mapA: '',
chunks: oldChunks,
});
from = t;
}
if (i === array.length - 1 && _chunks.length !== 0) {
episodes.push({
start: from,
end: t,
video: false,
audio: false,
map: '',
mapA: '',
chunks: _chunks,
});
}
oldChunks = _chunks;
});
return episodes.map((episode, index) => {
const _episode = { ...episode };
if (!episodes[index + 1]) {
_episode.end = endTime;
}
return _episode;
});
};
exports.createEpisodes = createEpisodes;
const getAllDimensions = ({ chunks, countX, countY, }) => {
let allWidth = 0;
let allHeight = 0;
let _countX = 0;
let _countY = 0;
chunks.forEach((chunk) => {
if (chunk.video) {
if (_countX < countX) {
_countX++;
allWidth += chunk.width;
}
if (_countY < countY) {
_countY++;
allHeight += chunk.height;
}
}
});
return { allWidth, allHeight };
};
const getVideoShifts = ({ videoCount, chunks, videoHeight, videoWidth, border, }) => {
const countX = videoCount === 2 || videoCount === 4 ? 2 : videoCount === 1 ? 1 : 3;
const countY = videoCount === 2 || videoCount === 3 ? 1 : videoCount === 1 ? 1 : 2;
const { allHeight, allWidth } = getAllDimensions({ chunks, countX, countY });
const width = videoWidth - allWidth;
let shiftX = 0;
let shiftY = 0;
const diffX = Math.abs(width);
if (width < 0) {
shiftX = diffX / countX + border * countX;
}
const height = videoHeight - allHeight;
const diffY = Math.abs(height);
if (height < 0) {
shiftY = diffY / countY + border * countY;
}
const x = width >= 0 ? diffX / countX / 2 : border;
const y = height >= 0 ? diffY / countY / 2 : border;
return { x, y, shiftX, shiftY };
};
exports.getVideoShifts = getVideoShifts;
const getCountVideos = (chunks) => {
let videoCount = 0;
let audioCount = 0;
chunks.forEach((item) => {
if (item.video) {
videoCount++;
}
if (item.audio) {
audioCount++;
}
});
return {
videoCount,
audioCount,
};
};
exports.getCountVideos = getCountVideos;
//# sourceMappingURL=interfaces.js.map