JavaScript XMLHttpRequest.responseType作为“ arraybuffer”-如何获取当前的arraybuffer块

时间:2019-03-28 09:09:42

标签: javascript

我正在尝试将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不会。

所以:这是将视频从客户端流传输到服务器的最佳方法吗?如果是,我实际上该如何做?如果没有,还有什么更好的方法?

1 个答案:

答案 0 :(得分:1)

实际上,arraybufferblob responseType类型在下载完成之前不允许访问大块数据。

现在,有多种方法...例如,在最新的浏览器中,您可以启动ReadableStream from the fetch API,或者在Firefox中将responseType设置为"moz-chunked-buffer",但这不是事实。您完全需要这里。

您所描述的正是WebRTC的目的。因此,最好的方法是运行STUN / TURN服务器,并使用MediaStream API通过它流媒体。