diff options
author | MetaMuffin <metamuffin@yandex.com> | 2021-08-06 10:00:48 +0200 |
---|---|---|
committer | MetaMuffin <metamuffin@yandex.com> | 2021-08-06 10:00:48 +0200 |
commit | 2387d8910d80b86a95e8c3242bdb6809dddda1aa (patch) | |
tree | c30cc11040534d4893f163e261a0c54f53fabadf | |
parent | 57785600bb67dc1163945bd19ff3bbb9f0aab0c2 (diff) | |
download | keks-meet-2387d8910d80b86a95e8c3242bdb6809dddda1aa.tar keks-meet-2387d8910d80b86a95e8c3242bdb6809dddda1aa.tar.bz2 keks-meet-2387d8910d80b86a95e8c3242bdb6809dddda1aa.tar.zst |
works somewhat
-rw-r--r-- | source/client/local_user.ts | 9 | ||||
-rw-r--r-- | source/client/logger.ts | 4 | ||||
-rw-r--r-- | source/client/remote_user.ts | 11 | ||||
-rw-r--r-- | source/client/user.ts | 21 |
4 files changed, 33 insertions, 12 deletions
diff --git a/source/client/local_user.ts b/source/client/local_user.ts index fcad4f3..70a8618 100644 --- a/source/client/local_user.ts +++ b/source/client/local_user.ts @@ -28,8 +28,8 @@ export class LocalUser extends User { } 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()) + if (this.audio_track) ru.peer.addTrack(this.audio_track) + if (this.video_track) ru.peer.addTrack(this.video_track) } async enable_video() { @@ -47,21 +47,22 @@ export class LocalUser extends User { } async disable_video() { if (!this.video_track) return - this.video_track = undefined 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.video_track = undefined } 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) }) }) + this.audio_track = undefined } diff --git a/source/client/logger.ts b/source/client/logger.ts index 7d61570..ea319b1 100644 --- a/source/client/logger.ts +++ b/source/client/logger.ts @@ -9,6 +9,10 @@ const log_tag_color: { [key in LogTag]: string } = { // TODO maybe log time aswell export function log(tag: LogTag, message: string, ...data: any[]) { + for (let i = 0; i < data.length; i++) { + const e = data[i]; + if (e instanceof MediaStreamTrack) data[i] = `(${e.kind}) ${e.id}` + } console.log(`%c[${tag}] ${message}`, "color:" + log_tag_color[tag], ...data); } diff --git a/source/client/remote_user.ts b/source/client/remote_user.ts index c7a9249..8318e0b 100644 --- a/source/client/remote_user.ts +++ b/source/client/remote_user.ts @@ -16,14 +16,9 @@ export class RemoteUser extends User { room.websocket_send({ ice_candiate: ev.candidate.toJSON(), receiver: this.name }) } this.peer.ontrack = ev => { - log("media", "remote track", ev.streams) - console.log(ev.track); - this.stream.addTrack(ev.track) - // if (!ev.streams.length) return console.warn("no remote tracks") - // ev.streams.forEach(s => s.getTracks().forEach(t => { - // this.stream.addTrack(t) - // })) - this.update_view() + const t = ev.track + log("media", "remote track", t) + this.add_track(t) } this.peer.onnegotiationneeded = async () => { log("webrtc", "negotiation needed") diff --git a/source/client/user.ts b/source/client/user.ts index b7ee24a..7d6991a 100644 --- a/source/client/user.ts +++ b/source/client/user.ts @@ -1,3 +1,4 @@ +import { log } from "./logger" import { Room } from "./room" @@ -20,6 +21,26 @@ export abstract class User { this.update_view() } + add_track(t: MediaStreamTrack) { + this.stream.addTrack(t) + this.update_view() + t.onended = () => { + log("media", "track ended", t) + this.stream.removeTrack(t) + this.update_view() + } + t.onmute = () => { + log("media", "track muted", t) + this.stream.removeTrack(t) + this.update_view() + } + t.onunmute = () => { + log("media", "track unmuted", t) + this.stream.addTrack(t) + this.update_view() + } + } + update_view() { if (this.view_el) this.el.removeChild(this.view_el) this.view_el = this.create_view() |