diff --git a/front/package.json b/front/package.json
index 9c592578..4e4d66c9 100644
--- a/front/package.json
+++ b/front/package.json
@@ -39,7 +39,7 @@
},
"dependencies": {
"@fontsource/press-start-2p": "^4.3.0",
- "@types/simple-peer": "^9.6.0",
+ "@types/simple-peer": "^9.11.1",
"@types/socket.io-client": "^1.4.32",
"axios": "^0.21.1",
"cross-env": "^7.0.3",
@@ -51,7 +51,7 @@
"queue-typescript": "^1.0.1",
"quill": "1.3.6",
"rxjs": "^6.6.3",
- "simple-peer": "^9.6.2",
+ "simple-peer": "^9.11.0",
"socket.io-client": "^2.3.0",
"standardized-audio-context": "^25.2.4"
},
diff --git a/front/src/Components/Chat/Chat.svelte b/front/src/Components/Chat/Chat.svelte
index 8432df3b..0f302126 100644
--- a/front/src/Components/Chat/Chat.svelte
+++ b/front/src/Components/Chat/Chat.svelte
@@ -48,7 +48,7 @@
\ No newline at end of file
diff --git a/front/src/Components/Video/VideoMediaBox.svelte b/front/src/Components/Video/VideoMediaBox.svelte
index 1a581914..d46f3ca7 100644
--- a/front/src/Components/Video/VideoMediaBox.svelte
+++ b/front/src/Components/Video/VideoMediaBox.svelte
@@ -37,9 +37,7 @@
Report/Block
- {#if $streamStore }
- {/if}
{#if $constraintStore && $constraintStore.audio !== false}
diff --git a/front/src/Components/Video/utils.ts b/front/src/Components/Video/utils.ts
index ca1f3b41..06bfcfa7 100644
--- a/front/src/Components/Video/utils.ts
+++ b/front/src/Components/Video/utils.ts
@@ -1,3 +1,6 @@
+import type { UserSimplePeerInterface } from "../../WebRtc/SimplePeer";
+import { STUN_SERVER, TURN_PASSWORD, TURN_SERVER, TURN_USER } from "../../Enum/EnvironmentVariable";
+
export function getColorByString(str: string): string | null {
let hash = 0;
if (str.length === 0) {
@@ -15,7 +18,7 @@ export function getColorByString(str: string): string | null {
return color;
}
-export function srcObject(node: HTMLVideoElement, stream: MediaStream) {
+export function srcObject(node: HTMLVideoElement, stream: MediaStream | null) {
node.srcObject = stream;
return {
update(newStream: MediaStream) {
@@ -25,3 +28,19 @@ export function srcObject(node: HTMLVideoElement, stream: MediaStream) {
},
};
}
+
+export function getIceServersConfig(user: UserSimplePeerInterface): RTCIceServer[] {
+ const config: RTCIceServer[] = [
+ {
+ urls: STUN_SERVER.split(","),
+ },
+ ];
+ if (TURN_SERVER !== "") {
+ config.push({
+ urls: TURN_SERVER.split(","),
+ username: user.webRtcUser || TURN_USER,
+ credential: user.webRtcPassword || TURN_PASSWORD,
+ });
+ }
+ return config;
+}
diff --git a/front/src/WebRtc/ScreenSharingPeer.ts b/front/src/WebRtc/ScreenSharingPeer.ts
index 9beab732..18810182 100644
--- a/front/src/WebRtc/ScreenSharingPeer.ts
+++ b/front/src/WebRtc/ScreenSharingPeer.ts
@@ -1,11 +1,10 @@
import type * as SimplePeerNamespace from "simple-peer";
-import { mediaManager } from "./MediaManager";
-import { STUN_SERVER, TURN_PASSWORD, TURN_SERVER, TURN_USER } from "../Enum/EnvironmentVariable";
import type { RoomConnection } from "../Connexion/RoomConnection";
import { MESSAGE_TYPE_CONSTRAINT, PeerStatus } from "./VideoPeer";
import type { UserSimplePeerInterface } from "./SimplePeer";
-import { Readable, readable, writable, Writable } from "svelte/store";
+import { Readable, readable } from "svelte/store";
import { videoFocusStore } from "../Stores/VideoFocusStore";
+import { getIceServersConfig } from "../Components/Video/utils";
const Peer: SimplePeerNamespace.SimplePeer = require("simple-peer");
@@ -32,21 +31,9 @@ export class ScreenSharingPeer extends Peer {
stream: MediaStream | null
) {
super({
- initiator: initiator ? initiator : false,
- //reconnectTimer: 10000,
+ initiator,
config: {
- iceServers: [
- {
- urls: STUN_SERVER.split(","),
- },
- TURN_SERVER !== ""
- ? {
- urls: TURN_SERVER.split(","),
- username: user.webRtcUser || TURN_USER,
- credential: user.webRtcPassword || TURN_PASSWORD,
- }
- : undefined,
- ].filter((value) => value !== undefined),
+ iceServers: getIceServersConfig(user),
},
});
diff --git a/front/src/WebRtc/VideoPeer.ts b/front/src/WebRtc/VideoPeer.ts
index 45118b5f..10bd54c7 100644
--- a/front/src/WebRtc/VideoPeer.ts
+++ b/front/src/WebRtc/VideoPeer.ts
@@ -1,15 +1,14 @@
import type * as SimplePeerNamespace from "simple-peer";
import { mediaManager } from "./MediaManager";
-import { STUN_SERVER, TURN_PASSWORD, TURN_SERVER, TURN_USER } from "../Enum/EnvironmentVariable";
import type { RoomConnection } from "../Connexion/RoomConnection";
import { blackListManager } from "./BlackListManager";
import type { Subscription } from "rxjs";
import type { UserSimplePeerInterface } from "./SimplePeer";
import { get, readable, Readable, Unsubscriber } from "svelte/store";
import { obtainedMediaConstraintStore } from "../Stores/MediaStore";
-import { discussionManager } from "./DiscussionManager";
import { playersStore } from "../Stores/PlayersStore";
import { chatMessagesStore, chatVisibilityStore, newChatMessageStore } from "../Stores/ChatStore";
+import { getIceServersConfig } from "../Components/Video/utils";
const Peer: SimplePeerNamespace.SimplePeer = require("simple-peer");
@@ -45,21 +44,9 @@ export class VideoPeer extends Peer {
localStream: MediaStream | null
) {
super({
- initiator: initiator ? initiator : false,
- //reconnectTimer: 10000,
+ initiator,
config: {
- iceServers: [
- {
- urls: STUN_SERVER.split(","),
- },
- TURN_SERVER !== ""
- ? {
- urls: TURN_SERVER.split(","),
- username: user.webRtcUser || TURN_USER,
- credential: user.webRtcPassword || TURN_PASSWORD,
- }
- : undefined,
- ].filter((value) => value !== undefined),
+ iceServers: getIceServersConfig(user),
},
});
@@ -272,7 +259,6 @@ export class VideoPeer extends Peer {
this.onUnBlockSubscribe.unsubscribe();
if (this.newMessageunsubscriber) this.newMessageunsubscriber();
chatMessagesStore.addOutcomingUser(this.userId);
- //discussionManager.removeParticipant(this.userId);
// FIXME: I don't understand why "Closing connection with" message is displayed TWICE before "Nb users in peerConnectionArray"
// I do understand the method closeConnection is called twice, but I don't understand how they manage to run in parallel.
super.destroy(error);
diff --git a/front/style/style.scss b/front/style/style.scss
index eb34287a..24da5a96 100644
--- a/front/style/style.scss
+++ b/front/style/style.scss
@@ -1,5 +1,5 @@
*{
- font-family: 'Open Sans', sans-serif;
+ font-family: Lato;
cursor: url('./images/cursor_normal.png'), auto;
}
* a, button, select{
diff --git a/front/yarn.lock b/front/yarn.lock
index fec87661..6ee607d3 100644
--- a/front/yarn.lock
+++ b/front/yarn.lock
@@ -262,10 +262,10 @@
"@types/mime" "^1"
"@types/node" "*"
-"@types/simple-peer@^9.6.0":
- version "9.6.3"
- resolved "https://registry.yarnpkg.com/@types/simple-peer/-/simple-peer-9.6.3.tgz#aa118a57e036f4ce2059a7e25367526a4764206d"
- integrity sha512-zrXEBch9tF4NgkZDsGR3c1D0kq99M1bBCjzEyL0PVfEWzCIXrK64TuxRz3XKOx1B0KoEQ9kTs+AhMDuQaHy5RQ==
+"@types/simple-peer@^9.11.1":
+ version "9.11.1"
+ resolved "https://registry.yarnpkg.com/@types/simple-peer/-/simple-peer-9.11.1.tgz#bef6ff1e75178d83438e33aa6a4df2fd98fded1d"
+ integrity sha512-Pzqbau/WlivSXdRC0He2Wz/ANj2wbi4gzJrtysZz93jvOyI2jo/ibMjUe6AvPllFl/UO6QXT/A0Rcp44bDQB5A==
dependencies:
"@types/node" "*"
@@ -5008,7 +5008,7 @@ signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3:
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c"
integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==
-simple-peer@^9.6.2:
+simple-peer@^9.11.0:
version "9.11.0"
resolved "https://registry.yarnpkg.com/simple-peer/-/simple-peer-9.11.0.tgz#e8d27609c7a610c3ddd75767da868e8daab67571"
integrity sha512-qvdNu/dGMHBm2uQ7oLhQBMhYlrOZC1ywXNCH/i8I4etxR1vrjCnU6ZSQBptndB1gcakjo2+w4OHo7Sjza1SHxg==