问题标签 [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.
javascript - HTML5 视频元素不请求结束范围
我有一个<video>
and<audio>
元素,它通过 Range 请求从我的服务器加载文件(mp4、mp3,没关系)。
然而,该元素似乎只从我的服务器请求结束范围,并且从那里开始尝试直接从字节 0 流式传输到末尾,导致播放器陷入“下载循环”,这使得浏览器暂停所有其他操作,直到下载完成。
有谁知道这个问题的解决方案?例如,我是否必须让我的流请求真正结束它的content length
or accept-ranges
?
这是来自 Chrome 的完整请求列表,在底部您可以看到对 url 的请求view?watch=v__AAAAAA673pxX
只是保持挂起状态,基本上直到element
.
简而言之:html5 元素在使用请求时会陷入下载循环,http-range
并导致所有其他请求保持“待处理”状态。
更新
该问题已在服务器端解决。
虽然原始流函数实际上会输出每个字节,但我修改了代码以仅输出实际缓冲区的大小。这会强制对elements
剩余数据提出新的请求。
此处的一个重要注意事项是返回content-length
,accept-ranges
并且content-ranges
与每个HTTP RANGE
请求中的文件大小、开始和结束位置相匹配。
供将来参考:
新的流功能:
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 从请求时记录的流媒体服务器上的文件组织实时视频流?任何建议都会有所帮助。
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 一切正常。谢谢大家。
node.js - express.js 检查部分范围下载是否完成
我在我的服务器上使用 express.js 中的 res.download 来提供文件以供下载。如果我在 res.download 的服务器回调函数中支持部分范围,则会多次调用。我如何知道下载何时完全完成?
node.js - 如何从NodeJS中的缓冲区流式传输范围http请求
在节点中测试 http 范围请求,当我们从
到res
http服务器的http,来自节点的http客户端接受它。
但是,当我通过管道传输缓冲区流时,使用:
Curl 和浏览器接受它,除了 NodeJShttp
客户端,它会抛出:
要对其进行测试,只需将第 56 行从更改'read'
为'buffer'
:
index.js
index.html
http - 解析无效的 HTTP `Range: ...` 标头时返回什么错误?
我正在开发一个手动解析Range: ...
字段的项目。出现错误时,它总是返回 416 HTTP 错误(Range Not Satisfiable)。
在我看来,在大多数情况下,比如范围不存在bytes=...
或数字无效,HTTP 错误应该改为 400。
你以前有过这个具体案例的经验吗?我们期望返回什么?
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
包含文件全部内容的响应:
这是回应:
java - 使用 Spring 解析和使用 HTTP Range 标头
我正在编写一个需要接受Range
标头的 Spring 控制器,使用那里的值使用第 3 方库请求一些数据,然后返回结果。
SpringHttpRange
类看起来很有希望,特别是parseRanges
函数,它说:
将给定的以逗号分隔的字符串解析为
HttpRange
对象列表。此方法可用于解析 [sic] Range 标头。
然而,这个类不提供任何接口来提取解析值而不知道“表示的总长度”。
鉴于我正在处理一个将转发到另一个 API 的请求,我不知道总长度。
是否有标准的 Spring 方法来检查 Range 标头并在不知道长度的情况下提取值?如果可能,我想避免编写自定义解析器。
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 秒......难道没有更简单的方法来获得给定字节的时间戳吗?
干杯:)
c# - 如何最好地响应开放的 HTTP 范围请求
我目前正在尝试响应 HTTP 范围请求的过程,以便可以从我们的服务器流式传输视频并满足 Safari 实际播放视频的要求。
我确实有额外的复杂性,即视频文件在磁盘上被加密,这使我无法进入Seek
流,但这并不真正在这个问题的范围内。
我注意到 Chrome 和至少新的 Edge 请求开放范围 (0 - )。在这里回应什么是正确的?目前我用我理解的完整视频做出回应,这完全违背了流媒体的目的。
以下是我迄今为止回应的全部尝试。
最令人沮丧的是,我注意到 Edge(我还没有测试过其他人)似乎总是发送一个开放的请求
我应该决定一个块大小来响应并坚持下去吗?我注意到,如果我确实响应了大小仅为 3 的块,那么 Edge 确实会以 3 为增量请求更多的范围。