/** * @type {import("./MWSE/index").default} */ let mwse; /** * @type {string} */ let mySocketId; /** * @type {string} */ let myIPAddress; /** * @type {string} */ let myNumber; /** * @type {string} */ let roomid; /** * @type {import("./MWSE/Room").default} */ let room; /** * @type {MediaStream} */ let outgoingStream; /** * @type {MediaStream} */ let outgoingStreamOnlyVideo; /** * @type {HTMLDivElement} */ let videoContainer = document.querySelector(".videolist"); let maxbitrate; let resulation; function connect() { mwse = new MWSE({ endpoint: "wss://ws.saqut.com" }); mwse.scope(beginEngine); } let interact = false; document.addEventListener("click",()=>{ interact = true; document.querySelectorAll(".soundon").forEach(e => e.muted = 0); }) /** * @type {HTMLVideoElement} */ let activeVideo; function templateVideo(name, stream,infinitedMute) { let i = document.createElement("video"); if(infinitedMute == true) { i.muted = 1; }else if(interact == false) { i.muted = 1; i.classList.add("soundon"); } i.classList.add("frame") i.playsInline = 1; i.autoplay = 1; i.dataset.name = name; if(stream) i.srcObject = stream; return i; } function addVideoList(name, stream, peer, infinitedMute) { if(!videoContainer.querySelector(`[name="${name}"]`)) { let video = templateVideo(name, stream, infinitedMute); video.dataset.user = peer.socketId; videoContainer.appendChild(video); } } function removeVideoList(name) { if(videoContainer.querySelector(`[data-name="${name}"]`)) { let k = videoContainer.querySelector(`[data-name="${name}"]`); if(k.dataset.user == activeVideo?.dataset.user || !activeVideo) { activePeer = null; } k.remove(); } } async function beginEngine() { let me = mwse.peer("me"); me.disablePairAuth(); mySocketId = me.socketId; myIPAddress = await mwse.virtualPressure.allocAPIPAddress(); myNumber = await mwse.virtualPressure.allocAPNumber(); let url = new URL(window.location); roomid = url.searchParams.get("room"); if(!!roomid == 0) { let hash = window.crypto.randomUUID(); url.searchParams.set("room", hash); window.location = url.href; }; connectRoom(roomid); }; window.addEventListener("load", () => { connect() }); async function startOutgoingWebcam() { outgoingStream = await navigator.mediaDevices.getUserMedia({ video: /*true*/{ advanced: [ { width: { exact: 1920 } }, { width: { exact: 1600 } }, { width: { exact: 1366 } }, { width: { exact: 1280 } }, { width: { exact: 1024 } }, { width: { exact: 900 } }, { width: { exact: 800 } }, { width: { exact: 640 } }, { width: { exact: 320 } }, { width: { exact: 240 } } ], facingMode: "user" },/**/ audio: false }); outgoingStreamOnlyVideo = new MediaStream(outgoingStream); } async function connectRoom() { await startOutgoingWebcam(); room = mwse.room({ name: roomid, joinType: "free", accessType: "private", description: "Private free joined room", ifexistsJoin: true, notifyActionEjected: true, notifyActionInvite: false, notifyActionJoined: true }); await room.createRoom(); room.on("join", peer => IncomingPeer(peer, true)); room.on("eject", peer => OutgoingPeer(peer)); for (const peer of await room.fetchPeers()) { IncomingPeer(peer) } addVideoList("My Webcam",outgoingStreamOnlyVideo, mwse.peer("me"), true) }; /** * @param {import("./MWSE/Peer").default} peer */ function IncomingPeer(peer,activeConnect) { let sendedOTP = false; peer.createRTC({ iceCandidatePoolSize: 0 },[{ urls: "turn:20.166.82.187:3478", username: "turnserver", credential: "turnserver" },{ urls: "stun:stun.l.google.com:19302" }]); if(activeConnect) { peer.rtc.connect(); } peer.rtc.rtc.turboBitrate = 0; peer.rtc.on('connected',() => { if(!activeConnect && !sendedOTP) { sendedOTP = true; peer.rtc.sendStream(outgoingStream, "Webcam", {}); } }); peer.rtc.on('disconnected',() => { removeVideoList(peer.streamY, peer); }); peer.rtc.on("stream:added", ({stream,name}) => { peer.streamY = peer.socketId + " | " + name + " - " + stream.id; addVideoList(peer.socketId + " | " + name + " - " + stream.id,stream, peer); if(activeConnect && !sendedOTP) { sendedOTP = true; peer.rtc.sendStream(outgoingStream, "Webcam", {}); } }) } /** * @param {import("./MWSE/Peer").default} peer */ function OutgoingPeer(peer) { removeVideoList(peer.streamY, peer); } /* setInterval(() => { if(activePeer?.turboBitrate === 0) { const senders = activePeer.getSenders(); const videoSender = senders.find(sender => sender.track?.kind === 'video'); if(videoSender) { const parameters = videoSender.getParameters(); parameters.encodings[0].maxBitrate = maxbitrate; parameters.encodings[0].scaleResolutionDownBy = resulation; videoSender.setParameters(parameters).then(() => { // console.log('Bitrate değiştirildi.'); activePeer.turboBitrate = 1; }) .catch(error => { // console.error('Bitrate değiştirilirken bir hata oluştu:', error); activePeer.turboBitrate = -1; }); } } }, 5000);*/ let relative;