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
Video 来自非零起始字节的HTML5视频字节范围请求_Video_Amazon S3_Html5 Video - Fatal编程技术网

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

Video 来自非零起始字节的HTML5视频字节范围请求,video,amazon-s3,html5-video,Video,Amazon S3,Html5 Video,我目前正在创建一个HTML5视频播放器,可以播放亚马逊s3上托管的视频。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

我目前正在创建一个HTML5视频播放器,可以播放亚马逊s3上托管的视频。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时,此代码可以完美地工作(如上面的代码所示)。但是,我也希望能够对视频开头不开始的块进行范围请求(比如范围:bytes=1000000-2000000)。这是不起作用的。当我尝试发出这种范围请求时,我发送具有正确范围的请求,并从s3获得适当的部分内容响应(206),但视频不会播放。我需要做些什么才能让它工作,你有什么想法吗?正如我前面提到的,我的目标是能够播放存储在s3上的视频块,这些视频块不是从一开始就开始的(从字节0开始)。

以这种方式查找mp4是不可能的。mp4分为两大部分,“moov”和“mdat”。mdat包含原始音频和视频信息,但如果没有“moov”,它将毫无用处。“moov”包含关于如何定位和解码“mdat”中的原始帧的信息。从0开始工作,因为“moov”位于文件的开头(在您的情况下)。因此,在moov之后开始,您可以下载原始帧,但deocder不知道这些帧的格式,甚至不知道帧的开始和结束时间。

非常感谢您的回复。那么,你是在告诉我,给定一个mp4文件,就没有办法从中提取出一个更小的可播放的块吗?是否可以发出两字节范围的请求。。。一个用于“moov”部分(尽管这很困难,因为我认为它不是恒定长度),另一个用于感兴趣的块,然后将字节流附加在一起,形成可播放的内容?我只是需要某种解决方案。是的,这是非常可能的,这就是标签的默认工作方式,您可以从对前8个字节执行范围请求开始,这可能是一个ftyp atom。(前4个字节是'ftyp',后4个字节是atom大小。然后你可以跳转到文件上查找并解析所有的atom。注意:这需要很多代码。atom是分层的,你需要解析大约30种不同的类型。很多类型都是紧凑的格式。嗨,akyker20,我知道这非常古老,但你找到了解决方法吗最终你的问题是什么?