Skip to content

Instantly share code, notes, and snippets.

@amn
Created September 23, 2021 19:17
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save amn/6d4844d04b038c32bd89b0284092e854 to your computer and use it in GitHub Desktop.
Save amn/6d4844d04b038c32bd89b0284092e854 to your computer and use it in GitHub Desktop.
A class of readable streams that vend data chunks generated by a media recorder
export default class MediaRecorderDataStream extends ReadableStream {
constructor(recorder) {
const signaler = new AbortController(), { signal } = signaler;
super({
start: controller => {
recorder.addEventListener("dataavailable", ev => {
controller.enqueue(ev.data);
}, { signal });
recorder.addEventListener("stop", ev => {
controller.close();
signaler.abort();
}, { once: true, signal });
},
cancel: () => {
signaler.abort();
}
}, { highWaterMark: 0, size: data => data.size });
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment