HTML5渐进式流式传输 - 没有后续范围请求

时间:2018-02-18 15:06:20

标签: ffmpeg video-streaming html5-video hls libav

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

据我所知,我已经让libav / ffmpeg正确地完成了他们的工作。我在RAM中用mpov原子编码了一个mp4。我已将此文件写入磁盘,并且它应该在任何地方播放。

我认为问题在于我如何响应HTTP范围请求。当我尝试进行直播时,我会收到bytes:0-的浏览器/播放器(目前已尝试使用Chrome,Firefox和VLC)的初始范围请求。我回复了一些初始字节。浏览器/播放器实际上播放得很好,但从未再问过。所以现场直播不起作用,只是前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中会发生这种情况......

3 个答案:

答案 0 :(得分:0)

渐进式下载不起作用。它浏览器假定文件永远不会改变。要播放实时流,您需要使用分段的MP4和媒体源扩展。

答案 1 :(得分:0)

这就是问题所在。我需要媒体扩展,我不清楚渐进式流媒体不适用于未知长度的直播。媒体扩展和websocket解决了这个问题。还需要将-dash用于libav,以使其在Chrome中运行。

答案 2 :(得分:0)

我遇到了类似的问题,该问题在Firebox上运行正常,但仅在Chrome中播放了视频的第一个片段,而没有其他要求。我的情况很简单,只需使用状态代码200和标头Accept-Ranges: bytes使第一个响应不返回任何内容即可。

看起来很常见,请检查更新部分是否存在以下问题:Content-Range working in Safari but not in Chrome