diff options
Diffstat (limited to 'client-web/source/resource/track.ts')
-rw-r--r-- | client-web/source/resource/track.ts | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/client-web/source/resource/track.ts b/client-web/source/resource/track.ts new file mode 100644 index 0000000..ee87917 --- /dev/null +++ b/client-web/source/resource/track.ts @@ -0,0 +1,44 @@ +import { ProvideInfo } from "../../../common/packets.d.ts"; +import { ebutton } from "../helper.ts"; +import { TrackHandle } from "../track_handle.ts"; +import { User } from "../user/mod.ts"; +import { Resource } from "./mod.ts"; + +export class TrackResource extends Resource { + constructor(user: User, info: ProvideInfo, public track?: TrackHandle) { + super(user, info) + } + + create_preview(): HTMLElement { + return ebutton("Enable", { onclick: () => this.request() }) + } + create_element() { + if (!this.track) { return this.create_preview() } + const el = document.createElement("div") + + const is_video = this.track.kind == "video" + const media_el = is_video ? document.createElement("video") : document.createElement("audio") + const stream = new MediaStream([this.track.track]) + media_el.srcObject = stream + media_el.classList.add("media") + media_el.autoplay = true + media_el.controls = true + if (this.track.local) media_el.muted = true + el.append(media_el) + + if (this.track.local) { + const end_button = document.createElement("button") + end_button.textContent = "End" + end_button.addEventListener("click", () => { + this.track?.end() + }) + el.append(end_button) + } + this.el.append(el) + this.track.addEventListener("ended", () => { + media_el.srcObject = null // TODO + el.remove() + }) + return el + } +}
\ No newline at end of file |