diff options
author | MetaMuffin <metamuffin@yandex.com> | 2021-08-06 14:08:51 +0200 |
---|---|---|
committer | MetaMuffin <metamuffin@yandex.com> | 2021-08-06 14:08:51 +0200 |
commit | 20c1b014fe502370edc733a6d8a756c9c1602f85 (patch) | |
tree | 0660f3ed287c1149fb93a0dac68c8f7b7c550a68 /source/client/local_user.ts | |
parent | 208f4f17fe3189ded2110baf166dc2e1ac60e619 (diff) | |
download | keks-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.ts | 45 |
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 } |