@yume-chan/scrcpy-decoder-webcodecs
Version:
Raw H.264 stream decoder and renderer using WebCodecs API (requires modern browser).
45 lines • 1.58 kB
JavaScript
// cspell: ignore insertable
export class InsertableStreamVideoFrameRenderer {
static get isSupported() {
return typeof MediaStreamTrackGenerator !== "undefined";
}
#element;
get element() {
return this.#element;
}
#generator;
#writer;
#stream;
constructor(element) {
if (element) {
this.#element = element;
}
else if (typeof document !== "undefined") {
this.#element = document.createElement("video");
}
else {
throw new Error("no video element input found nor any video element can be created");
}
this.#element.muted = true;
this.#element.autoplay = true;
this.#element.disablePictureInPicture = true;
this.#element.disableRemotePlayback = true;
// The spec replaced `MediaStreamTrackGenerator` with `VideoTrackGenerator`.
// But Chrome has not implemented it yet.
// https://issues.chromium.org/issues/40058895
this.#generator = new MediaStreamTrackGenerator({ kind: "video" });
this.#writer = this.#generator.writable.getWriter();
this.#stream = new MediaStream([this.#generator]);
this.#element.srcObject = this.#stream;
}
setSize(width, height) {
if (this.#element.width !== width || this.#element.height !== height) {
this.#element.width = width;
this.#element.height = height;
}
}
async draw(frame) {
await this.#writer.write(frame);
}
}
//# sourceMappingURL=insertable-stream.js.map