summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMetaMuffin <metamuffin@yandex.com>2021-08-06 10:00:48 +0200
committerMetaMuffin <metamuffin@yandex.com>2021-08-06 10:00:48 +0200
commit2387d8910d80b86a95e8c3242bdb6809dddda1aa (patch)
treec30cc11040534d4893f163e261a0c54f53fabadf
parent57785600bb67dc1163945bd19ff3bbb9f0aab0c2 (diff)
downloadkeks-meet-2387d8910d80b86a95e8c3242bdb6809dddda1aa.tar
keks-meet-2387d8910d80b86a95e8c3242bdb6809dddda1aa.tar.bz2
keks-meet-2387d8910d80b86a95e8c3242bdb6809dddda1aa.tar.zst
works somewhat
-rw-r--r--source/client/local_user.ts9
-rw-r--r--source/client/logger.ts4
-rw-r--r--source/client/remote_user.ts11
-rw-r--r--source/client/user.ts21
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()