2016-10-27 35 views
1

我想知道是否有可能确定HTTP范围请求中的开始&结束字节,或让浏览器知道从哪里开始并让它使用某个用户定义块大小左右。 我在我的数据库中有一个文件,它被分成多个块,每个块都是2 MB。如何确定HTTP范围请求开始和结束字节(nodejs + mongodb)

例如。 20 MB文件=> 10块

当浏览器开始下载文件(视频文件)时,我研究了Chrome,它首先检查'range=bytes 0-'字节范围,如果服务器成功响应'正确'字节和206标头背部,然后将其发送的文件,例如'range=bytes 1900000-'结束字节另一个请求,

如果您的服务器的部分响应

在服务器端的我已经编写我的应用程序,这样它会发送响应以及它只是checkes 2 MB部分,如果你问它:) :)

我想什么做浏览器

range=bytes 0-'

range=bytes 2000000-4000000 bytes'

range=bytes 4000000-6000000 bytes'

但如果你问一个部分,其在2MB块犯规适合它会给出一个错误。或者它不会从音频/视频文件的正确位置播放。

range=bytes 2500000-4000000 bytes'

range=bytes 0-1000000 bytes'

这会给一个错误,因为我不能开始从一个块的一部分发送。否则,我必须切片我的块并做一些缓冲操作。但我想保持清洁。 如果这是可能的,请让我知道。

回答

3

我假设你正在流mp4文件? mp4的不同部分(盒子)具有不同的目的,不可能跳到文件中的随机位置,并且通过预加载索引(moov)首先识别每个帧的位置而开始播放。 moov可以在文件的开头或结尾,因此浏览器可能首先需要文件的结尾。它可以从一开始就确定这个,并且如果它不在开始处寻找moov,将会有一个指向下一个盒子的位置的指针。它可以跳过文件直到找到索引。一旦下载了moov头文件,浏览器就会知道视频中每个单帧的EXACT字节偏移量和大小,并且可以在搜索时跳转文件。这一切都是可能的,因为浏览器知道如何本机解析mp4。 TLDR。不,您的解决方案不起作用。

+0

我正在实现部分下载,不仅适用于mp4,而且还适用于其他文件类型,例如音频文件,iso文件等。不知道有关moov索引的事情。但我很好奇它是如何与MongoDB网格一起工作的。 mongodb nodejs驱动程序还将文件分割为块,当我想要检索文件时,mp4开始流畅地播放,并且可以搜索。他们定义分块的缓冲区长度以匹配请求的字节范围,等等。但我还没有,谢谢你的信息,虽然 – webmaster

相关问题