我们正在创建一个chrome扩展来下载视频,目前我有这个功能:
function downloadvideo(video)
{
const url = URL.createObjectURL(video.captureStream());
const aelem = document.createElement('a');
document.body.appendChild(aelem);
aelem.setAttribute("href",url);
aelem.setAttribute("download","video.mp4");
aelem.click();
//URL.revokeObjectURL(url);
}
这里的video
参数是一个html5视频元素,我之所以使用caputreStream
,是因为一些网站(特别是youtube)使用了blob url,这些url显然是被撤销的,所以我从MediaStream
创建了一个新的Blob url。
上面的函数作为视频的onloadeddata
事件的一部分执行。
对话框显示,文件名是正确的,但是当我点击“保存”时,chrome显示“失败:找不到文件”。
那么如何让它真正起作用呢?
顺便说一句,我试图对url
做ajax,但是chrome拒绝了,并显示了这样的消息:“跨源只支持http,https,chrome,chrome-extension”:3 .
发布于 2017-05-03 23:39:13
URL.createObjectURL()
注意:使用MediaStream对象作为此方法的输入正在被弃用。关于是否应该彻底删除它的讨论正在进行中。因此,您应该尽量避免将此方法用于MediaStreams,而应改用HTMLMediaElement.srcObject()。
参考:https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL#Browser_compatibility
https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/srcObject#Browser_compatibility
代码:
函数下载video(Video){
var mediaStream = video.captureStream();
//adding a dom element and fetching it in HTMLMediaElement.
HTMLMediaElement.srcObject = mediaStream;
var url = HTMLMediaElement.currentSrc;
const aelem = document.createElement('a');
document.body.appendChild(aelem);
aelem.setAttribute("href",url);
aelem.setAttribute("download","video.mp4");
aelem.click();
//URL.revokeObjectURL(url);
}
看看这对你是否有效。
发布于 2017-05-03 16:22:51
这是我用来从canvas frame capture下载bloburl格式的视频的函数
function createdVideo(){
var output = 'your video or captured stream or canvas capture'
var url = webkitURL.createObjectURL(output);
// output_video.src = url; //toString converts it to a URL via Object URLs, falling back to DataURL
download.href = url;//download is id of download link which als ohave download atribute}
我希望能在你的情况下工作
https://stackoverflow.com/questions/43584205
复制相似问题