From 8f8a2f7f8820852253c1258234c51e33108424dd Mon Sep 17 00:00:00 2001 From: Avently <7953703+avently@users.noreply.github.com> Date: Sat, 4 Nov 2023 21:08:08 +0800 Subject: [PATCH] temp --- .../commonMain/resources/assets/www/call.js | 72 +++++++++++++------ .../resources/assets/www/desktop/ui.js | 1 + packages/simplex-chat-webrtc/src/call.ts | 72 +++++++++++++------ .../simplex-chat-webrtc/src/desktop/ui.ts | 1 + 4 files changed, 102 insertions(+), 44 deletions(-) diff --git a/apps/multiplatform/common/src/commonMain/resources/assets/www/call.js b/apps/multiplatform/common/src/commonMain/resources/assets/www/call.js index b13fda1b92..43e378140f 100644 --- a/apps/multiplatform/common/src/commonMain/resources/assets/www/call.js +++ b/apps/multiplatform/common/src/commonMain/resources/assets/www/call.js @@ -25,6 +25,7 @@ var TransformOperation; let activeCall; let answerTimeout = 30000; var useWorker = false; +var isDesktop = false; var localizedState = ""; var localizedDescription = ""; const processCommand = (function () { @@ -392,6 +393,7 @@ const processCommand = (function () { const pc = call.connection; pc.ontrack = (event) => { try { + console.log("LALAL ONTRACK"); if (call.aesKey && call.key) { console.log("set up decryption for receiving"); setupPeerTransform(TransformOperation.Decrypt, event.receiver, call.worker, call.aesKey, call.key); @@ -403,6 +405,9 @@ const processCommand = (function () { console.log("LALAL ADDED TRACK " + event.track.kind); }; for (const track of stream.getTracks()) { + track.onmute = (_event) => { + console.log("LALAL ON MUTE"); + }; call.remoteStream.addTrack(track); } } @@ -489,12 +494,27 @@ const processCommand = (function () { if (!call.cameraEnabled && !call.screenShareEnabled) { enableMedia(localStream, CallMediaType.Video, false); } - replaceTracks(pc, audioTracks, false); - replaceTracks(pc, videoTracks, call.screenShareEnabled); + replaceTracks(pc, audioTracks, localStream, false); + replaceTracks(pc, videoTracks, localStream, call.screenShareEnabled); call.localStream = localStream; videos.local.srcObject = localStream; + // const offer = await pc.createOffer() + // await pc.setLocalDescription(offer) + // // const resp: WCallRenegotiateOffer = { + // // type: "renegotiate-offer", + // // offer: serialize(offer), + // // } + // const encryption = supportsInsertableStreams(useWorker) + // const resp: WCallOffer = { + // type: "offer", + // offer: serialize(offer), + // iceCandidates: await call.iceCandidates, + // capabilities: {encryption}, + // } + // const apiResp: WVApiMessage = {corrId: undefined, resp, command: undefined} + // sendMessageToNative(apiResp) } - function replaceTracks(pc, tracks, addIfNeeded) { + function replaceTracks(pc, tracks, localStream, addIfNeeded) { var _a; if (!tracks.length) return; @@ -504,7 +524,7 @@ const processCommand = (function () { sender.replaceTrack(t); else if (addIfNeeded) { for (const track of tracks) - pc.addTrack(track, activeCall.localStream); + pc.addTrack(track, localStream); const call = activeCall; if (call.aesKey && call.key) { console.log("set up encryption for sending"); @@ -537,9 +557,17 @@ const processCommand = (function () { console.log(`no ${operation}`); } } - function getLocalMediaStream(mediaType, facingMode) { + async function getLocalMediaStream(mediaType, facingMode) { const constraints = callMediaConstraints(mediaType, facingMode); - return navigator.mediaDevices.getUserMedia(constraints); + const stream = await navigator.mediaDevices.getUserMedia(constraints); + if (isDesktop) { + stream + .getTracks() + .filter((elem) => elem.kind == "video") + .forEach((elem) => (elem.enabled = false)); + stream.getTracks().forEach((elem) => console.log("LALAL TRACK EN " + elem.enabled)); + } + return stream; } function getLocalScreenCaptureStream() { const constraints /* DisplayMediaStreamConstraints */ = { @@ -557,23 +585,23 @@ const processCommand = (function () { return navigator.mediaDevices.getDisplayMedia(constraints); } function callMediaConstraints(mediaType, facingMode) { - switch (mediaType) { - case CallMediaType.Audio: - return { audio: true, video: false }; - case CallMediaType.Video: - return { - audio: true, - video: { - frameRate: 24, - width: { - min: 480, - ideal: 720, - max: 1280, - }, - aspectRatio: 1.33, - facingMode, + if (mediaType == CallMediaType.Audio && !isDesktop) { + return { audio: true, video: false }; + } + else { + return { + audio: true, + video: { + frameRate: 24, + width: { + min: 480, + ideal: 720, + max: 1280, }, - }; + aspectRatio: 1.33, + facingMode, + }, + }; } } function supportsInsertableStreams(useWorker) { diff --git a/apps/multiplatform/common/src/commonMain/resources/assets/www/desktop/ui.js b/apps/multiplatform/common/src/commonMain/resources/assets/www/desktop/ui.js index 625f092930..3580cf45a1 100644 --- a/apps/multiplatform/common/src/commonMain/resources/assets/www/desktop/ui.js +++ b/apps/multiplatform/common/src/commonMain/resources/assets/www/desktop/ui.js @@ -1,6 +1,7 @@ "use strict"; // Override defaults to enable worker on Chrome and Safari useWorker = typeof window.Worker !== "undefined"; +isDesktop = true; // Create WebSocket connection. const socket = new WebSocket(`ws://${location.host}`); socket.addEventListener("open", (_event) => { diff --git a/packages/simplex-chat-webrtc/src/call.ts b/packages/simplex-chat-webrtc/src/call.ts index b13651ef9c..a94917bdf5 100644 --- a/packages/simplex-chat-webrtc/src/call.ts +++ b/packages/simplex-chat-webrtc/src/call.ts @@ -216,6 +216,7 @@ interface Call { let activeCall: Call | undefined let answerTimeout = 30_000 var useWorker = false +var isDesktop = false var localizedState = "" var localizedDescription = "" @@ -602,6 +603,7 @@ const processCommand = (function () { const pc = call.connection pc.ontrack = (event) => { try { + console.log("LALAL ONTRACK") if (call.aesKey && call.key) { console.log("set up decryption for receiving") setupPeerTransform(TransformOperation.Decrypt, event.receiver as RTCRtpReceiverWithEncryption, call.worker, call.aesKey, call.key) @@ -613,6 +615,9 @@ const processCommand = (function () { console.log("LALAL ADDED TRACK " + event.track.kind) } for (const track of stream.getTracks()) { + track.onmute = (_event) => { + console.log("LALAL ON MUTE") + } call.remoteStream.addTrack(track) } } @@ -699,18 +704,34 @@ const processCommand = (function () { enableMedia(localStream, CallMediaType.Video, false) } - replaceTracks(pc, audioTracks, false) - replaceTracks(pc, videoTracks, call.screenShareEnabled) + replaceTracks(pc, audioTracks, localStream, false) + replaceTracks(pc, videoTracks, localStream, call.screenShareEnabled) call.localStream = localStream videos.local.srcObject = localStream + + // const offer = await pc.createOffer() + // await pc.setLocalDescription(offer) + // // const resp: WCallRenegotiateOffer = { + // // type: "renegotiate-offer", + // // offer: serialize(offer), + // // } + // const encryption = supportsInsertableStreams(useWorker) + // const resp: WCallOffer = { + // type: "offer", + // offer: serialize(offer), + // iceCandidates: await call.iceCandidates, + // capabilities: {encryption}, + // } + // const apiResp: WVApiMessage = {corrId: undefined, resp, command: undefined} + // sendMessageToNative(apiResp) } - function replaceTracks(pc: RTCPeerConnection, tracks: MediaStreamTrack[], addIfNeeded: boolean) { + function replaceTracks(pc: RTCPeerConnection, tracks: MediaStreamTrack[], localStream: MediaStream, addIfNeeded: boolean) { if (!tracks.length) return const sender = pc.getSenders().find((s) => s.track?.kind === tracks[0].kind) if (sender) for (const t of tracks) sender.replaceTrack(t) else if (addIfNeeded) { - for (const track of tracks) pc.addTrack(track, activeCall!.localStream) + for (const track of tracks) pc.addTrack(track, localStream) const call = activeCall! if (call.aesKey && call.key) { console.log("set up encryption for sending") @@ -748,9 +769,17 @@ const processCommand = (function () { } } - function getLocalMediaStream(mediaType: CallMediaType, facingMode: VideoCamera): Promise { + async function getLocalMediaStream(mediaType: CallMediaType, facingMode: VideoCamera): Promise { const constraints = callMediaConstraints(mediaType, facingMode) - return navigator.mediaDevices.getUserMedia(constraints) + const stream = await navigator.mediaDevices.getUserMedia(constraints) + if (isDesktop) { + stream + .getTracks() + .filter((elem) => elem.kind == "video") + .forEach((elem) => (elem.enabled = false)) + stream.getTracks().forEach((elem) => console.log("LALAL TRACK EN " + elem.enabled)) + } + return stream } function getLocalScreenCaptureStream(): Promise { @@ -770,23 +799,22 @@ const processCommand = (function () { } function callMediaConstraints(mediaType: CallMediaType, facingMode: VideoCamera): MediaStreamConstraints { - switch (mediaType) { - case CallMediaType.Audio: - return {audio: true, video: false} - case CallMediaType.Video: - return { - audio: true, - video: { - frameRate: 24, - width: { - min: 480, - ideal: 720, - max: 1280, - }, - aspectRatio: 1.33, - facingMode, + if (mediaType == CallMediaType.Audio && !isDesktop) { + return {audio: true, video: false} + } else { + return { + audio: true, + video: { + frameRate: 24, + width: { + min: 480, + ideal: 720, + max: 1280, }, - } + aspectRatio: 1.33, + facingMode, + }, + } } } diff --git a/packages/simplex-chat-webrtc/src/desktop/ui.ts b/packages/simplex-chat-webrtc/src/desktop/ui.ts index 3d52c87d93..579f6e8576 100644 --- a/packages/simplex-chat-webrtc/src/desktop/ui.ts +++ b/packages/simplex-chat-webrtc/src/desktop/ui.ts @@ -1,5 +1,6 @@ // Override defaults to enable worker on Chrome and Safari useWorker = typeof window.Worker !== "undefined" +isDesktop = true // Create WebSocket connection. const socket = new WebSocket(`ws://${location.host}`)