我正在尝试将a从客户端流传输到服务器端,以稍后将视频返回流传输到另一个客户端。
重点是:
如何从客户端JavaScript(可以发送到服务器)中获取视频片段?
使用此代码,例如:
var x = new XMLHttpRequest();
var url = location.href;
x.onreadystatechange = function(){
if(x.readyState == 200) {
console.log("done");
} else {
console.log("chunk",x.response); //this is null until readyState is 200 anyway
}
}
x.onprogress = e => {
console.log("EE",e.target.response); //also null if resposneType is arraybuffer
};
x.responseType="arraybuffer";
x.open("GET","http://localhost:88/videoplayback.mp4",true);
x.send("");
当我尝试在响应完成加载之前打印响应时(通过分块获取),然后它只是null;数组缓冲区仅在完成加载后才作为respnse返回。
如果我取出响应类型并将其保留为纯文本格式,那么即使每次就绪状态更改完成之前,确实也会在屏幕上打印一些unicode字符,而只有arraybuffer不会。
所以:这是将视频从客户端流传输到服务器的最佳方法吗?如果是,我实际上该如何做?如果没有,还有什么更好的方法?
答案 0 :(得分:1)
实际上,arraybuffer
或blob
responseType类型在下载完成之前不允许访问大块数据。
现在,有多种方法...例如,在最新的浏览器中,您可以启动ReadableStream from the fetch API,或者在Firefox中将responseType
设置为"moz-chunked-buffer"
,但这不是事实。您完全需要这里。
您所描述的正是WebRTC的目的。因此,最好的方法是运行STUN / TURN服务器,并使用MediaStream API通过它流媒体。