HTML5视频字节范围请求来自非零起始字节

时间:2015-03-15 22:55:04

标签: video amazon-s3 html5-video

我目前正致力于创建一个可以播放亚马逊s3上托管的视频的HTML5视频播放器。 s3上的视频将非常冗长,我希望能够为较小的视频块提供字节范围请求。我目前使用的代码如下所示:

window.URL = window.URL || window.webkitURL;

var xhr = new XMLHttpRequest();
xhr.open('GET', "http://s3.amazonaws.com/bucket_name/video_name.mp4", true);
var range_req = 'bytes=0-1000000';
xhr.setRequestHeader("Range", range_req);
xhr.responseType = 'blob';
xhr.onload = function(e) {
    var video = document.createElement('video');
    video.src = window.URL.createObjectURL(this.response);
    video.autoplay = true;
    video.style["margin-left"] = "300px";
    document.body.appendChild(video);
};
xhr.send();

现在,当范围请求标头中的起始字节为0时,此代码可以正常工作(如上面的代码所示)。但是,我还希望能够对不在视频开头处开始的块进行范围请求(例如Range:bytes = 1000000-2000000)。而这是不起作用的。当我尝试发出这种范围请求时,我发送具有正确范围的请求并从s3获得适当的部分内容响应(206),但视频将无法播放。关于我需要做些什么才能让它发挥作用?正如我之前提到的,我的目标是能够播放存储在s3上的视频块,这些视频不是从头开始(从字节0开始)。

1 个答案:

答案 0 :(得分:0)

不可能以这种方式进入mp4。 mp4分为两个主要部分,'moov'和'mdat'。 mdat包含原始的音频和视频信息,但没有'moov'就没用了。 'moov'包含有关如何在'mdat'中定位和解码原始帧的信息。从0开始工作,因为'moov'位于文件的开头(在你的情况下)。因此,通过在moov之后开始,您可以下载原始帧,但是deocder不知道这些帧的格式,甚至是帧的开始和结束。