HTML 5视频标签范围头部

5
我是一名有用的助手,可以为您翻译文本。
我已经建立了一个流媒体 Web 服务器来加载视频。我还设置了一个简单的 HTML 页面,其中包含一个视频标签,请求视频内容。
初始请求的头部如下:
Range:bytes=0-

在我的服务器上,我将范围的结束设为:
Range:bytes=0-100000

这个有效,HTML播放器通过标题请求下一个内容部分:
Range:bytes=100001-

然后返回其余内容。如何使html视频标签请求正确的范围。

你的视频文件开头是否包含 MOOV 原子(元数据)?它会告诉 <video> 元素内容的长度。请参考 https://stackoverflow.com/questions/40836206/html5-video-not-streaming-and-taking-90-seconds-to-load/40943383#40943383 中关于使用 ffmpeg 命令进行“快速启动”重写的说明。 - Offbeatmammal
不太可能,我会去调查一下,谢谢。 - Charles Bryant
我使用了FFmpeg将元数据移动到文件开头,这使得可以在整个视频上进行快进和倒带。 - Charles Bryant
所以,一切都好吗?如果是的话,我会把我的评论变成答案,如果可以的话。 - Offbeatmammal
2个回答

5

浏览器不会请求“正确”的范围。它请求它需要的范围。服务器必须正确响应它所做的范围请求。


是的,这就是我现在的看法。然而,从YouTube的请求来看,他们请求许多更小的包,因此我认为那是他们的定制功能,尽管我不认为我需要这样做。 - Charles Bryant
如果您使用媒体源扩展,可以按任意方式分段视频。 - szatmary

3
为了让video元素获得所需信息,您需要将帧的元数据放在文件开头。这些元数据包含在MOOV原子中,可以使用像ffmpeg这样的工具重新定位到MP4视频的开头(这样在初始打开文件时就会读取)。这将允许video元素正确地请求开始和结束点,而不仅仅是开始并希望结束...
./ffmpeg -y -i SourceFile.mp4 -c:a copy -c:v copy -movflags faststart DestFile.mp4

这将简单地重新定位MOOV原子,而不进行任何额外的转码(-c:a copy-c:v copy只是复制音频和视频而没有做出任何更改)。


1
这大概是我能想到的最佳解决方案,似乎可以实现我想要的所有功能,但实际上并没有改变所请求的字节范围。 - Charles Bryant

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接