aboutsummaryrefslogtreecommitdiff
path: root/source/client/local_user.ts
diff options
context:
space:
mode:
authorMetaMuffin <metamuffin@yandex.com>2021-08-06 14:08:51 +0200
committerMetaMuffin <metamuffin@yandex.com>2021-08-06 14:08:51 +0200
commit20c1b014fe502370edc733a6d8a756c9c1602f85 (patch)
tree0660f3ed287c1149fb93a0dac68c8f7b7c550a68 /source/client/local_user.ts
parent208f4f17fe3189ded2110baf166dc2e1ac60e619 (diff)
downloadkeks-meet-20c1b014fe502370edc733a6d8a756c9c1602f85.tar
keks-meet-20c1b014fe502370edc733a6d8a756c9c1602f85.tar.bz2
keks-meet-20c1b014fe502370edc733a6d8a756c9c1602f85.tar.zst
updated readme, implemented rnnoise, added parameters
Diffstat (limited to 'source/client/local_user.ts')
-rw-r--r--source/client/local_user.ts45
1 files changed, 38 insertions, 7 deletions
diff --git a/source/client/local_user.ts b/source/client/local_user.ts
index 3fe6216..cda9b53 100644
--- a/source/client/local_user.ts
+++ b/source/client/local_user.ts
@@ -1,5 +1,7 @@
+import { parameter_bool, parameter_string } from "./helper";
import { log } from "./logger";
import { RemoteUser } from "./remote_user";
+import { rnnoise_track } from "./rnnoise";
import { Room } from "./room";
import { User } from "./user";
@@ -9,12 +11,14 @@ export class LocalUser extends User {
private audio_track?: MediaStreamTrack
private video_track?: MediaStreamTrack
- controls: { audio?: HTMLElement, video?: HTMLElement } = {}
+ controls?: { audio: HTMLElement, video: HTMLElement }
constructor(room: Room, name: string) {
super(room, name)
this.el.classList.add("local")
this.create_controls()
+ if (parameter_bool("audio_enabled", false)) this.enable_audio()
+ if (parameter_bool("video_enabled", false)) this.enable_video()
}
create_controls() {
@@ -39,9 +43,21 @@ export class LocalUser extends User {
const el = document.createElement("div")
el.classList.add("local-controls")
el.append(audio_toggle, video_toggle)
+ this.controls = { video: video_toggle, audio: audio_toggle }
document.body.append(el)
}
+ update_view_w() {
+ this.update_view()
+ if (this.stream.getAudioTracks().length > 0)
+ this.controls?.audio.classList.add("enabled")
+ else this.controls?.audio.classList.remove("enabled")
+
+ if (this.stream.getVideoTracks().length > 0)
+ this.controls?.video.classList.add("enabled")
+ else this.controls?.video.classList.remove("enabled")
+ }
+
async add_initial_to_remote(ru: RemoteUser) {
if (this.audio_track) ru.peer.addTrack(this.audio_track)
if (this.video_track) ru.peer.addTrack(this.video_track)
@@ -54,16 +70,31 @@ export class LocalUser extends User {
const t = this.video_track = user_media.getVideoTracks()[0]
this.room.remote_users.forEach(u => u.peer.addTrack(t))
this.stream.addTrack(t)
- this.update_view()
+ this.update_view_w()
}
async enable_audio() {
if (this.audio_track) return
log("media", "requesting user media (audio)")
- const user_media = await window.navigator.mediaDevices.getUserMedia({ audio: true })
- const t = this.audio_track = user_media.getAudioTracks()[0]
+
+ const use_rnnoise = parameter_bool("rnnoise", true)
+ const audio_contraints = use_rnnoise ? {
+ channelCount: { ideal: 1 },
+ noiseSuppression: { ideal: false },
+ echoCancellation: { ideal: true },
+ autoGainControl: { ideal: false },
+ } : true;
+
+ const user_media = await window.navigator.mediaDevices.getUserMedia({ audio: audio_contraints })
+ let t = user_media.getAudioTracks()[0]
+
+ if (use_rnnoise) {
+ t = await rnnoise_track(t)
+ }
+
+ this.audio_track = t
this.room.remote_users.forEach(u => u.peer.addTrack(t))
this.stream.addTrack(t)
- this.update_view()
+ this.update_view_w()
}
async disable_video() {
if (!this.video_track) return
@@ -73,7 +104,7 @@ export class LocalUser extends User {
})
})
this.stream.removeTrack(this.video_track)
- this.update_view()
+ this.update_view_w()
this.video_track = undefined
}
async disable_audio() {
@@ -84,7 +115,7 @@ export class LocalUser extends User {
})
})
this.stream.removeTrack(this.audio_track)
- this.update_view()
+ this.update_view_w()
this.audio_track = undefined
}