【问题标题】:How to determine HTTP range request start & end bytes (nodejs + mongodb)如何确定 HTTP 范围请求的开始和结束字节(nodejs + mongodb)
【发布时间】:2016-10-27 01:22:03
【问题描述】:

我想知道是否可以确定 HTTP 范围请求中的开始和结束字节,或者让浏览器以某种方式知道从哪里开始并让它使用一些用户定义的块大小左右。 我的数据库中有一个文件,它被分成多个块,每个块为 2 MB。

例如。 20 MB 文件 => 10 个块

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

它只是检查您的服务器是否对部分响应响应良好

在服务器端,我已经对我的应用进行了编码,这样如果你很好地询问它,它就会发送 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'

这将产生错误,因为我无法从块的一部分开始发送。否则我必须分割我的块并做一些缓冲操作。但我想保持清洁。 如果可以,请告诉我。

【问题讨论】:

    标签: node.js http-live-streaming chunks


    【解决方案1】:

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

    【讨论】:

    • 我正在实现部分下载,不仅适用于 mp4,还适用于其他文件类型,例如音频文件、iso 文件等。不知道 moov 索引的事情。但我很好奇它是如何与 MongoDB gridfs 一起工作的。 mongodb nodejs 驱动程序还将文件分成块,当我想检索文件时,mp4 开始完美流式传输并且它是可搜索的。他们定义切片块的缓冲区长度以匹配请求的字节范围等等。但我还没有,谢谢你的信息
    猜你喜欢
    • 1970-01-01
    • 2020-02-25
    • 1970-01-01
    • 1970-01-01
    • 2021-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多