diff options
author | MetaMuffin <metamuffin@yandex.com> | 2021-08-06 13:20:35 +0200 |
---|---|---|
committer | MetaMuffin <metamuffin@yandex.com> | 2021-08-06 13:20:35 +0200 |
commit | a8f89036b5788a3f6ddb053824650b913a0c98a3 (patch) | |
tree | 7bdd48b3d95b7e33fc59da046bedfe68129ad559 /source/client/local_user.ts | |
parent | 2387d8910d80b86a95e8c3242bdb6809dddda1aa (diff) | |
download | keks-meet-a8f89036b5788a3f6ddb053824650b913a0c98a3.tar keks-meet-a8f89036b5788a3f6ddb053824650b913a0c98a3.tar.bz2 keks-meet-a8f89036b5788a3f6ddb053824650b913a0c98a3.tar.zst |
idk
Diffstat (limited to 'source/client/local_user.ts')
-rw-r--r-- | source/client/local_user.ts | 51 |
1 files changed, 36 insertions, 15 deletions
diff --git a/source/client/local_user.ts b/source/client/local_user.ts index 70a8618..3fe6216 100644 --- a/source/client/local_user.ts +++ b/source/client/local_user.ts @@ -1,3 +1,4 @@ +import { log } from "./logger"; import { RemoteUser } from "./remote_user"; import { Room } from "./room"; import { User } from "./user"; @@ -8,23 +9,37 @@ export class LocalUser extends User { private audio_track?: MediaStreamTrack private video_track?: MediaStreamTrack + controls: { audio?: HTMLElement, video?: HTMLElement } = {} + constructor(room: Room, name: string) { super(room, name) + this.el.classList.add("local") this.create_controls() - //@ts-ignore - window.ea = () => this.enable_audio() - //@ts-ignore - window.da = () => this.disable_audio() - //@ts-ignore - window.ev = () => this.enable_video() - //@ts-ignore - window.dv = () => this.disable_video() } create_controls() { - setTimeout(() => { - this.enable_video() - }, 3000) + const audio_toggle = document.createElement("input") + const video_toggle = document.createElement("input") + audio_toggle.type = video_toggle.type = "button" + audio_toggle.value = "Audio" + video_toggle.value = "Video" + let audio = false, video = false + + audio_toggle.addEventListener("click", () => { + audio = !audio + if (audio) this.enable_audio() + else this.disable_audio() + }) + video_toggle.addEventListener("click", () => { + video = !video + if (video) this.enable_video() + else this.disable_video() + }) + + const el = document.createElement("div") + el.classList.add("local-controls") + el.append(audio_toggle, video_toggle) + document.body.append(el) } async add_initial_to_remote(ru: RemoteUser) { @@ -34,25 +49,31 @@ export class LocalUser extends User { async enable_video() { if (this.video_track) return + log("media", "requesting user media (video)") const user_media = await window.navigator.mediaDevices.getUserMedia({ video: true }) - console.log(user_media.getVideoTracks()); 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() } 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] this.room.remote_users.forEach(u => u.peer.addTrack(t)) + this.stream.addTrack(t) + this.update_view() } async disable_video() { if (!this.video_track) return this.room.remote_users.forEach(u => { u.peer.getSenders().forEach(s => { - console.log(u, s, this.video_track); if (s.track == this.video_track) u.peer.removeTrack(s) }) }) + this.stream.removeTrack(this.video_track) + this.update_view() this.video_track = undefined } async disable_audio() { @@ -62,9 +83,9 @@ export class LocalUser extends User { if (s.track == this.audio_track) u.peer.removeTrack(s) }) }) + this.stream.removeTrack(this.audio_track) + this.update_view() this.audio_track = undefined } - - }
\ No newline at end of file |