捕获后未初始化 NS 错误 html canvas
NS Error not initialized after capturing html canvas
我正在尝试使用 javascript/html 录制 svg 动画。这是我到目前为止尝试过的:
<canvas id="canv">
<svg width="370" height="370" viewBox="0 0 370 370" fill="none" xmlns="http://www.w3.org/2000/svg">
<!-- my svg is here, full code is below because i don't think it's important -->
</svg>
</canvas>
<style>
@keyframes animation{
from{
opacity: 0;
transform: translateY(20%);
}to{
opacity: 1;
transform: translateY(0);
}
}
#bubbles{
animation: animation 1s linear;
}
</style>
<script>
const canvas = document.getElementById("canv")
var videoStream = canvas.captureStream(30);
const render = () => {
videoStream.getVideoTracks()[0].requestFrame();
}
setInterval(render, 33)
var mediaRecorder = new MediaRecorder(videoStream);
var chunks = [];
mediaRecorder.ondataavailable = function(e) {
chunks.push(e.data);
};
mediaRecorder.onstop = function(e) {
var blob = new Blob(chunks, { 'type' : 'video/mp4' });
chunks = [];
var videoURL = URL.createObjectURL(blob);
video.src = videoURL;
};
mediaRecorder.start();
setTimeout(() => {
mediaRecorder.stop();
}, 1000)
</script>
我从 https://medium.com/@amatewasu/how-to-record-a-canvas-element-d4d0826d3591 获得了源代码并且我正在使用 firefox。
完整来源:https://paste.gg/p/anonymous/89d475bc50bc469dad827a620d3f7c02
问题:我收到此错误并且未显示任何内容:
您需要在 canvas 上初始化一个上下文,然后 才能从中捕获流,为此,您调用它的 getContext()
方法。
然后您需要使用该上下文的方法在其上实际绘制一些内容,这就是 MediaStream 将捕获的内容。
在 canvas 中附加
另一种解决方案是使用 2D 上下文的绘图 API 来再现 SVG,这至少是同步的,因此不同步的风险较小,但编写的代码更复杂(一些库喜欢canvg 可能有助于完成此任务,但您仍然必须找到在每一帧提取动画当前状态的方法。
我正在尝试使用 javascript/html 录制 svg 动画。这是我到目前为止尝试过的:
<canvas id="canv">
<svg width="370" height="370" viewBox="0 0 370 370" fill="none" xmlns="http://www.w3.org/2000/svg">
<!-- my svg is here, full code is below because i don't think it's important -->
</svg>
</canvas>
<style>
@keyframes animation{
from{
opacity: 0;
transform: translateY(20%);
}to{
opacity: 1;
transform: translateY(0);
}
}
#bubbles{
animation: animation 1s linear;
}
</style>
<script>
const canvas = document.getElementById("canv")
var videoStream = canvas.captureStream(30);
const render = () => {
videoStream.getVideoTracks()[0].requestFrame();
}
setInterval(render, 33)
var mediaRecorder = new MediaRecorder(videoStream);
var chunks = [];
mediaRecorder.ondataavailable = function(e) {
chunks.push(e.data);
};
mediaRecorder.onstop = function(e) {
var blob = new Blob(chunks, { 'type' : 'video/mp4' });
chunks = [];
var videoURL = URL.createObjectURL(blob);
video.src = videoURL;
};
mediaRecorder.start();
setTimeout(() => {
mediaRecorder.stop();
}, 1000)
</script>
我从 https://medium.com/@amatewasu/how-to-record-a-canvas-element-d4d0826d3591 获得了源代码并且我正在使用 firefox。 完整来源:https://paste.gg/p/anonymous/89d475bc50bc469dad827a620d3f7c02
问题:我收到此错误并且未显示任何内容:
您需要在 canvas 上初始化一个上下文,然后 才能从中捕获流,为此,您调用它的 getContext()
方法。
然后您需要使用该上下文的方法在其上实际绘制一些内容,这就是 MediaStream 将捕获的内容。
在 canvas 中附加
另一种解决方案是使用 2D 上下文的绘图 API 来再现 SVG,这至少是同步的,因此不同步的风险较小,但编写的代码更复杂(一些库喜欢canvg 可能有助于完成此任务,但您仍然必须找到在每一帧提取动画当前状态的方法。