在Android Android中获取BLOB

时间:2013-06-19 11:05:20

标签: javascript android html5 google-chrome xmlhttprequest

我很难在Android 4.2上使用xhr2和blob responseType来获取HTML5视频。该代码在Chrome和Firefox桌面以及Firefox Android 4.2上完美运行(使用FF桌面,我使用webm视频而不是mp4)。

// Taking care of prefix
window.URL = window.URL || window.webkitURL;    

// This function download the video
var loadVideo = function() {

        var xhr = new XMLHttpRequest();

        xhr.addEventListener('load', addVideoFile, false);

        xhr.open('GET', "videos/myvideo.mp4" , true);
        xhr.responseType = 'blob';

        xhr.send();
};

// this function sets the video source
var addVideoFile = function() {
    if(4 == this.readyState && 200 == this.status) {

        var video = document.getElementById('vid'),
            blob = this.response;

        video.src = window.URL.createObjectURL(blob);
        console.log('video ready');
    }
};

loadVideo();

任何人都可以解释为什么这不适用于Android上的Chrome?如果我插上手机使用远程调试,控制台将显示“视频就绪”,表示视频已下载,但无法播放,视频只是一个黑屏。

此外,如果我使用它来获取图像而不是视频,此代码也可以使用。有没有我不知道的限制,阻止下载Blob超过一定的大小? (我的视频是1.5 MB)。

非常感谢你的帮助!

2 个答案:

答案 0 :(得分:1)

这肯定是一个错误。如果你得到的东西适用于桌面Chrome而不是Android,那么99.5%的时间是我们需要修复的问题。

我已复制了您的问题http://jsbin.com/uyehun/1,我也提交了错误https://code.google.com/p/chromium/issues/detail?id=253465

答案 1 :(得分:0)

Per http://caniuse.com/bloburls,对于Android 4.0-4.3,您需要使用window.webkitURL.createObjectUrl()而不是window.URL.createObjectUrl()。

这会让你生成一个blob网址,虽然我实际上还没有能够获得一个视频元素来播放这样的网址。