我为mp3
文件构建了一个音频流,每次客户端点击音频时都会收到如下内容:
但它的作用只是播放1分钟样本而不是120分钟
我在这里做错了什么?
答案 0 :(得分:3)
不是100%肯定,因为您没有提供代码或示例流进行测试,但您对HTTP范围请求的处理已被破坏。
在您的示例请求中,客户端发送Range: bytes=0-
,您的服务器响应1MiB响应:
Content-Length: 1048576
(又名.1 MiB)Content-Range: 0-1048575/...
这是错误的,客户端没有要求这个!它确实请求bytes=0-
,意味着从位置0到整个流的末尾的所有数据(参见http 1.1 RFC),即响应等于没有任何Range
的响应。 (IIRC,Firefox仍然发送Range: bytes=0-
来检测服务器是否首先处理范围。)
这与Content-Length
相结合,导致客户端(Firefox)认为整个资源的大小仅为1MiB,而不是实际大小。我想你的测试流的前1个MiB是1:06的音频。
PS:Content-Duration
标题(又名RFC 3803)是浏览器根本不会实现的,只是忽略。
答案 1 :(得分:0)
只是一个想法。您是否尝试过一些http 3xx标题: ' 308恢复不完整'或者' 503服务暂时不可用'再加上' retry-after:2'或者' 413请求实体太大'加上' retry-after:2'