【发布时间】:2021-07-01 07:33:04
【问题描述】:
我正在尝试从标签中录制部分视频,将其保存以备后用。并且找到了这篇文章:Recording a media element,里面描述了一个方法,先调用stream = video.captureStream(),然后用new MediaRecord(stream)获取记录器。
我已经在一些演示中进行了测试,如果 stream 来自用户的设备(例如麦克风),MediaRecorder 可以正常工作。但是,当涉及到媒体元素时,我的 FireFox 浏览器会抛出异常:MediaRecorder.start: The MediaStream's isolation properties disallow access from MediaRecorder。
那么你知道如何处理它吗?
浏览器:火狐
页面(包括js文件)存储在本地。
<video> 标签的src 属性可以是来自本地存储的文件,也可以是来自 Internet 的 url。
代码sn-ps:
let chunks = [];
let getCaptureStream = function () {
let stream;
const fps = 0;
if (video.captureStream) {
console.log("use captureStream");
stream = video.captureStream(fps);
} else if (video.mozCaptureStream) {
console.log("use mozCaptureStream");
stream = video.mozCaptureStream(fps);
} else {
console.error('Stream capture is not supported');
stream = null;
}
return stream;
}
video.addEventListener('play', () => {
let stream = getCaptureStream();
const mediaRecorder = new MediaRecorder(stream);
mediaRecorder.onstop = function() {
const newVideo = document.createElement('video');
newVideo.setAttribute('controls', '');
newVideo.controls = true;
const blob = new Blob(chunks);
chunks = [];
const videoURL = window.URL.createObjectURL(blob, { 'type' : 'video/mp4; codecs="avc1.42E01E, mp4a.40.2"' });
newVideo.src = videoURL;
document.body.appendChild(video);
}
mediaRecorder.ondataavailable = function(e) {
chunks.push(e.data);
}
stopButton.onclick = function() {
mediaRecorder.stop()
}
mediaRecorder.start(); // This is the line triggers exception.
});
【问题讨论】:
标签: javascript video mediaelement multimedia