diff options
author | MetaMuffin <metamuffin@yandex.com> | 2021-08-06 09:44:50 +0200 |
---|---|---|
committer | MetaMuffin <metamuffin@yandex.com> | 2021-08-06 09:44:50 +0200 |
commit | 57785600bb67dc1163945bd19ff3bbb9f0aab0c2 (patch) | |
tree | 02712d28da139eb0236d00e5727ecd324ab04d09 /source/client/local_user.ts | |
parent | 9a44e9370cb3398bb4bb08a4a85f1d303a90031f (diff) | |
download | keks-meet-57785600bb67dc1163945bd19ff3bbb9f0aab0c2.tar keks-meet-57785600bb67dc1163945bd19ff3bbb9f0aab0c2.tar.bz2 keks-meet-57785600bb67dc1163945bd19ff3bbb9f0aab0c2.tar.zst |
b
Diffstat (limited to 'source/client/local_user.ts')
-rw-r--r-- | source/client/local_user.ts | 65 |
1 files changed, 50 insertions, 15 deletions
diff --git a/source/client/local_user.ts b/source/client/local_user.ts index 10a87b7..fcad4f3 100644 --- a/source/client/local_user.ts +++ b/source/client/local_user.ts @@ -4,31 +4,66 @@ import { User } from "./user"; export class LocalUser extends User { + + private audio_track?: MediaStreamTrack + private video_track?: MediaStreamTrack + constructor(room: Room, name: string) { super(room, name) - this.get_streams() + 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() } - async get_streams() { - const user_media = await window.navigator.mediaDevices.getUserMedia({ audio: true, video: true }) - await new Promise<void>(r => setTimeout(() => r(), 3000)) - for (const t of user_media.getTracks()) { - this.add_track(t) - } + create_controls() { + setTimeout(() => { + this.enable_video() + }, 3000) } - add_tracks_to_remote(u: RemoteUser) { - this.stream.forEach(t => { - u.peer.addTrack(t, new MediaStream()) - }) + async add_initial_to_remote(ru: RemoteUser) { + if (this.audio_track) ru.peer.addTrack(this.audio_track, new MediaStream()) + if (this.video_track) ru.peer.addTrack(this.video_track, new MediaStream()) } - add_track(t: MediaStreamTrack) { - this.update_view() - this.stream.push(t) + async enable_video() { + if (this.video_track) return + 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)) + } + async enable_audio() { + if (this.audio_track) return + 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)) + } + async disable_video() { + if (!this.video_track) return + this.video_track = undefined this.room.remote_users.forEach(u => { - u.peer.addTrack(t) + u.peer.getSenders().forEach(s => { + if (s.track == this.video_track) u.peer.removeTrack(s) + }) }) } + async disable_audio() { + if (!this.audio_track) return + this.audio_track = undefined + this.room.remote_users.forEach(u => { + u.peer.getSenders().forEach(s => { + if (s.track == this.audio_track) u.peer.removeTrack(s) + }) + }) + } + + }
\ No newline at end of file |