p5.record.js
Version:
p5.js addon providing functions to record HTML canvas based sketches
2 lines (1 loc) • 1.79 kB
JavaScript
!function(e){"use strict";class r{#e;#r;constructor(e){const r="manual"===e.frameRate?0:e.frameRate,t=[],a=(e.source instanceof HTMLCanvasElement?e.source:e.source.canvas).captureStream(r),s=new MediaRecorder(a,{mimeType:e.mimeType??"video/webm;codecs=vp8"});s.addEventListener("start",e=>{console.log("recording started")}),s.addEventListener("stop",r=>{const a=new Blob(t);if("function"!=typeof e?.stopCallback||e?.stopCallback(a)){const e=URL.createObjectURL(a),r=document.createElement("a");r.href=e,r.download="recording.webm",r.click()}}),s.addEventListener("dataavailable",e=>{t.push(e.data)}),s.addEventListener("pause",e=>{console.log("recording paused")}),s.addEventListener("resume",e=>{console.log("recording resumed")}),this.#r=s,this.#e=a}get state(){return this.#r.state}start(){this.#r.start()}stop(){this.#r.stop()}pause(){this.#r.pause()}resume(){this.#r.resume()}frame(){this.#e.getVideoTracks()[0].requestFrame()}}function t(e,t,a){let s,o;const n=e.VERSION.split(".").map(e=>parseInt(e));n[0]>2||n[0]>2&&n[1]>0||2===n[0]&&0===n[1]&&n[2]>=3?(e.Recorder=r,a.postdraw=function(){s&&"recording"===s.state&&"manual"===o?.frameRate&&s.frame()},t.setRecording=function(e){"manual"!==e.frameRate||"CanvasCaptureMediaStreamTrack"in window?o=e:console.error("Your browser does not support directly specifying frame capture timing with { frameRate: 'manual' }.")},t.startRecording=function(){o=Object.assign({source:this.canvas,frameRate:this.getTargetFrameRate()},o),s=new r(o),s.start()},t.stopRecording=function(){s.stop()},t.pauseRecording=function(){s.pause()},t.resumeRecording=function(){s.resume()},t.createRecording=function(e){return new r(e)}):console.error("p5.record.js requires p5.js >= 2.0.3")}"undefined"!=typeof p5&&p5.registerAddon(t),e.Recorder=r,e.p5Record=t}({});