问题标签 [http-range]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4658 浏览

javascript - HTML5 视频元素不请求结束范围

我有一个<video>and<audio>元素,它通过 Range 请求从我的服务器加载文件(mp4、mp3,没关系)。

然而,该元素似乎只从我的服务器请求结束范围,并且从那里开始尝试直接从字节 0 流式传输到末尾,导致播放器陷入“下载循环”,这使得浏览器暂停所有其他操作,直到下载完成。

范围请求 1

范围请求 2

有谁知道这个问题的解决方案?例如,我是否必须让我的流请求真正结束它的content lengthor accept-ranges

这是来自 Chrome 的完整请求列表,在底部您可以看到对 url 的请求view?watch=v__AAAAAA673pxX只是保持挂起状态,基本上直到element.

全方位的请求历史

简而言之:html5 元素在使用请求时会陷入下载循环,http-range并导致所有其他请求保持“待处理”状态。

更新

该问题已在服务器端解决。

虽然原始流函数实际上会输出每个字节,但我修改了代码以仅输出实际缓冲区的大小。这会强制对elements剩余数据提出新的请求。

此处的一个重要注意事项是返回content-length,accept-ranges并且content-ranges与每个HTTP RANGE请求中的文件大小、开始和结束位置相匹配。

供将来参考:

新的流功能:

0 投票
0 回答
81 浏览

php - 写入目标文件时的 HTTP RANGE

我想通过 HTTP RANGE(HLS 不适合我的目的)从请求时记录的流媒体服务器上的文件组织实时视频流。在服务器端,我使用以下标头:

当我通过 ffplay 或 vlc 请求文件时,它的播放效果很好,但在请求文件时停止了。我尝试人为地增加一个 $size,但情况并没有改变,只是在 ffplay 日志中看到了 Stream ends 过早的错误:

[http @ 0x7f30a40079e0] 流在 34156620 处提前结束,应该是 35180908
[http @ 0x7f30a40079e0] 流在 33656620 处提前结束,应该是 35443052
[http @ 0x7f30a40079e0] 流在 326056620 处提前结束,应该是 326056626

如何通过 http 从请求时记录的流媒体服务器上的文件组织实时视频流?任何建议都会有所帮助。

0 投票
0 回答
142 浏览

javascript - HTTP-Range 请求待处理问题

我的问题很奇怪。我用 javascript 和 php 编写了一个简单的音频播放器应用程序。我在 JS 上有一个音频元素,当我必须加载歌曲时,我使用链接 /player.php?token... 来播放歌曲。服务器端我有一个基于此的简单脚本: HTTP Range script

问题是 chrome 正确加载了歌曲,但同时我不能做任何其他 xmlhttp 请求。在音频请求结束之前,所有请求都变成了挂起的请求。

在此处输入图像描述

见上图。例如,如果我将歌曲搜索到最后,chrome 停止第一个请求,所有挂起的开始,它对歌曲执行另一个请求。如果我用 mac os(Safari、Chrome 和 Firefox)测试同一首歌,一切正常。该问题仅出现在 Windows(Chrome 和 Firefox)中。如果我将音频 src 直接设置为文件 mp3 一切正常。谢谢大家。

0 投票
1 回答
93 浏览

node.js - express.js 检查部分范围下载是否完成

我在我的服务器上使用 express.js 中的 res.download 来提供文件以供下载。如果我在 res.download 的服务器回调函数中支持部分范围,则会多次调用。我如何知道下载何时完全完成?

0 投票
1 回答
571 浏览

node.js - 如何从NodeJS中的缓冲区流式传输范围http请求

在节点中测试 http 范围请求,当我们从

reshttp服务器的http,来自节点的http客户端接受它。

但是,当我通过管道传输缓冲区流时,使用:

Curl 和浏览器接受它,除了 NodeJShttp客户端,它会抛出:


要对其进行测试,只需将第 56 行从更改'read''buffer'

index.js

index.html

0 投票
1 回答
101 浏览

http - 解析无效的 HTTP `Range: ...` 标头时返回什么错误?

我正在开发一个手动解析Range: ...字段的项目。出现错误时,它总是返回 416 HTTP 错误(Range Not Satisfiable)。

在我看来,在大多数情况下,比如范围不存在bytes=...或数字无效,HTTP 错误应该改为 400。

你以前有过这个具体案例的经验吗?我们期望返回什么?

0 投票
1 回答
811 浏览

c# - FileStreamResult 无法识别 Asp.Net Core 2.2 中的多个 http 范围

我有这样简单的端点:

目前文件内容:

abcdefghijklmnopqrstuvwxyz

正如您在 return 语句中看到的那样,我传递true的是enableRangeProcessing. 在单范围请求的情况下,它可以按预期工作:

curl -H Range:bytes=0-8 http://localhost:65318/api/File -i

这是回应:

但是,在多范围请求的情况下,它不会考虑任何范围,并将返回Ok包含文件全部内容的响应:

这是回应:

0 投票
0 回答
267 浏览

java - 使用 Spring 解析和使用 HTTP Range 标头

我正在编写一个需要接受Range标头的 Spring 控制器,使用那里的值使用第 3 方库请求一些数据,然后返回结果。

SpringHttpRange类看起来很有希望,特别是parseRanges函数,它说:

将给定的以逗号分隔的字符串解析为HttpRange对象列表。

此方法可用于解析 [sic] Range 标头。

然而,这个类不提供任何接口来提取解析值而不知道“表示的总长度”。

鉴于我正在处理一个将转发到另一个 API 的请求,我不知道总长度。

是否有标准的 Spring 方法来检查 Range 标头并在不知道长度的情况下提取值?如果可能,我想避免编写自定义解析器。

0 投票
0 回答
157 浏览

php - 从给定的字节范围获取视频时间戳 - PHP

我正在提供一些视频。基本上,用户使用 VLC 播放 https 流,请求到达我的服务器,然后我查看 HTTP-RANGE 请求并提供询问的字节。我想在视频中保存用户进度时间戳。我试过了,served_byte/video_size*video_duration但这不能正常工作。我也尝试过像这样使用 ffprobe ffprobe -i cool.mkv -show_entries packet=pos,pts_time -select_streams v -of compact=p=0:nk=1 -v 0参见这篇文章),但是解析一个安静的 3Gb 视频大约需要 5 秒......难道没有更简单的方法来获得给定字节的时间戳吗?

干杯:)

0 投票
1 回答
187 浏览

c# - 如何最好地响应开放的 HTTP 范围请求

我目前正在尝试响应 HTTP 范围请求的过程,以便可以从我们的服务器流式传输视频并满足 Safari 实际播放视频的要求。

我确实有额外的复杂性,即视频文件在磁盘上被加密,这使我无法进入Seek流,但这并不真正在这个问题的范围内。

我注意到 Chrome 和至少新的 Edge 请求开放范围 (0 - )。在这里回应什么是正确的?目前我用我理解的完整视频做出回应,这完全违背了流媒体的目的。

以下是我迄今为止回应的全部尝试。

最令人沮丧的是,我注意到 Edge(我还没有测试过其他人)似乎总是发送一个开放的请求

我应该决定一个块大小来响应并坚持下去吗?我注意到,如果我确实响应了大小仅为 3 的块,那么 Edge 确实会以 3 为增量请求更多的范围。