HTML5渐进流 - 无后续范围请求



我正在使用即时录制视频的嵌入式设备。我想使用我们自己的自定义服务器将其流式传输到HTML5视频元素。我有这个几乎工作,想要一些帮助。

据我所知,我有Libav/ffmpeg做正确的工作。我在文件开始时用MOOV原子编码了RAM中的MP4。我已经将此文件写给了磁盘,并且在任何地方都可以播放。

我认为,问题在于我对HTTP范围请求的响应方式。当我尝试进行实时流时,我从浏览器/播放器(目前尝试过Chrome,Firefox和VLC(获得了bytes:0-的初始范围请求。我用一些初始字节做出了回应。浏览器/播放器实际上表现良好,但再也没有问过。因此,直播流不起作用,只有前3秒或其他。

我已经看了部分内容的RFC规格,我的理解是我正在做我应该做的事情...显然我不是。这是Chrome作为请求者的请求/响应的示例:


get /live.mp4 HTTP/1.1 host: localhost:1235 connection: keep-alive accept-encoding: identity;q=1, *;q=0 user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.167 Safari/537.36 accept: */* dnt: 1 accept-language: en-GB,en-US;q=0.9,en;q=0.8 range: bytes=0-

HTTP/1.1 206 Partial Content Accept-Ranges: bytes Content-Type: video/mp4 Content-Length: 182400 Content-Range: bytes 0-182399/*


再次,使用该请求/响应对,Chrome扮演了第一个182400字节,但从未提出第二个请求。我以为Content-Range中的"*"会实现这一目标...

渐进下载不起作用。它浏览器假设文件将永远不会更改。要播放实时流,您需要使用零碎的MP4和媒体源扩展。

这是问题所在。我需要媒体扩展,对我而言,尚不清楚渐进式流媒体不是为了未知长度的实时饲料。媒体扩展和Websocket解决了问题。还需要使用 -dash作为libav使其在chrome中起作用。

我遇到了一个类似的问题,它在Firebox上正常工作,但仅在Chrome中播放视频的第一个片段,并且不要求其他任何内容。我的案子是通过简单地通过200状态代码和Accept-Ranges: bytes标题来解决的,从而解决了我的案例。

看起来很常见,请检查以下问题的更新部分:在Safari中工作的内容范围,但在Chrome中不工作

最新更新