Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从视频流获取数据URL?_Javascript_Video_Stream_Webrtc_Webm - Fatal编程技术网

Javascript 从视频流获取数据URL?

Javascript 从视频流获取数据URL?,javascript,video,stream,webrtc,webm,Javascript,Video,Stream,Webrtc,Webm,我有一个视频(webm)捕获脚本,效果很好。它录制视频,然后提供下载。该准则的相关部分如下: stopBtn.addEventListener('click', function() { recorder.ondataavailable = e => { ul.style.display = 'block'; var a = document.createElement('a'), li = document.createEl

我有一个视频(webm)捕获脚本,效果很好。它录制视频,然后提供下载。该准则的相关部分如下:

stopBtn.addEventListener('click', function() {
    recorder.ondataavailable = e => {
        ul.style.display = 'block';
        var a = document.createElement('a'),
            li = document.createElement('li');
        a.download = ['video_', (new Date() + '').slice(4, 28), '.'+vid_format].join('');
        a.textContent = a.download;
        a.href = URL.createObjectURL(stream); //<-- deprecated usage?
        li.appendChild(a);
        ul.appendChild(li);
    };
    recorder.stop();
    startBtn.removeAttribute('disabled');
    stopBtn.disabled = true;
}, false);
…尽管一切都正常,我还是得到了同样的警告

有人知道我如何不使用这种不推荐的方式获取URL或blob数据吗


我还试着从视频元素中读取
src
currentSrc
属性,但是当涉及到流时,它们返回为空。

我真的很惊讶你的代码居然能工作

如果
stream
实际上是一个
MediaStream
,那么浏览器甚至不应该知道需要下载的大小,因此不应该知道何时停止下载(它是一个流)

MediaRecorder#ondataavailable
将公开一个事件,其中
数据
属性填充了录制的媒体流的一块。在这种情况下,您必须将这些块存储在一个数组中,然后下载这些blob块的连接,通常在MediaRecorder#onstop事件中

const stream=getCanvasStream();//我们将使用画布流,以便它在stacksnippet中工作
常量块=[];//这将存储我们的blob块
const recorder=新媒体记录器(流);
recorder.ondataavailable=e=>chunks.push(e.data);//在此事件中给出了一个新的块Blob
recorder.onstop=exportVid;//只有当录像机停止时,我们才输出整个系统;
setTimeout(()=>recorder.stop(),5000);//将在5秒内停止
记录器。启动(1000);//所有块都将是1
函数exportVid(){
var blob=new blob(chunks);//这里我们将所有的块连接在一个blob中
var url=url.createObjectURL(blob);//我们从这个blob创建一个blobURL
var a=document.createElement('a');
a、 href=url;
a、 innerHTML='下载';
a、 下载='myfile.webm';
文件.正文.附件(a);
stream.getTracks().forEach(t=>t.stop());//在不再需要时关闭流从来都不坏
}
函数getCanvasStream(){
const canvas=document.createElement('canvas');
const ctx=canvas.getContext('2d');
ctx.fillStyle='红色';
//要录制的简单动画
设x=0;
常数anim=t=>{
x=(x+2)%300;
ctx.clearRect(0,0,300,150);
ctx.fillRect(x,0,10,10);
请求动画帧(anim);
}
动漫();
document.body.appendChild(画布);
返回canvas.captureStream(30);

}
您正在尝试下载流?通常的方法是通过MediaRecorder创建一个blob,然后下载blob(其中包括URL.createObjectURL,但包含一个blob,而不是流),基本上我只想将录制的视频保存到服务器上。谢谢你的提示-你能给我一些关于如何做或读什么的建议吗?代码片段应该是ace。这段代码真的有效吗?好的,谢谢你。我意识到您在最后一段中表达的概念-我在问题中自己说过-我特别询问如何通过这种首选(即非弃用)方法导出数据URL。chunks和blob方法正是我所需要的。
a.href = URL.createObjectURL(video.srcObject);