【问题标题】:HTTP Video StreamingHTTP 视频流
【发布时间】:2022-01-12 23:19:51
【问题描述】:

我有一台服务器(未连接互联网),它在内部网站上托管包含公司数据的网页。服务器还在定义的目录结构中包含视频(数千个)。

当客户连接时,我可以在内部网站上向他们显示视频。问题是某些视频文件为 1Gb 或更大,与某些客户端的连接速度很慢;浏览器似乎正在尝试下载它们以播放它们而不是流式传输它们。

是否有一个视频流服务器,我可以将文件路径发送到它并将视频作为流提供回客户端?

我想这实际上是对我需要完成的视频进行转码。我不确定 PLEX 或类似的东西是否能够动态地做到这一点,因为有数百个视频和新视频一直在添加。

对不起,如果我不清楚我的需要。如果我对某一点不清楚,请发给我一个问题。

【问题讨论】:

  • 您将需要服务器(Apache、IIS 等)来支持字节范围请求(现在大多数情况下)——您将无法为此仅指向网络上的路径,将需要通过网络服务器。此外,如果是 MP4,您需要在开始时使用 MOOV atom 对视频进行编码(否则浏览器需要读取整个文件以获取查找所需的元数据等)

标签: http video-streaming html5-video http-live-streaming plex


【解决方案1】:

...浏览器似乎正在尝试下载它们以播放它们而不是流式传输它们。

为了回应 @Offbeatmammal 在 cmets 中所说的内容,如果您使用的是 MP4 文件,则需要确保 MOOV atom 位于文件的开头。没有它,浏览器不知道要请求什么字节偏移量。

理想情况下,将您的视频文件编码为碎片。在 FFmpeg 中:

ffmpeg -i ... -f mp4 -movflags frag_keyframe+empty_moov output.mp4

另见:https://stackoverflow.com/a/9734251/362536

这应该允许客户端从任何支持 HTTP/1.1 范围请求的 Web 服务器流式传输 MP4 文件。 (大多数都这样做,除非另有配置。)

但是,还有一点需要说明:

问题是某些视频文件为 1Gb 或更大,与某些客户端的连接速度相当慢...

虽然解决流式传输问题意味着客户端不必先下载整个文件,但他们仍然需要带宽来跟上流式传输。如果它们可能不会,您将需要实现某种转码器。

我建议使用现有的分段流式传输方法,例如 DASH 或 HLS。由于 Apple 的平台政策,HLS 目前是最兼容的。两者都将启用自适应比特率切换,这将允许慢速客户端自动切换到他们可以顺利跟上的较低比特率流。这样,速度较慢的客户端仍然可以看到视频,尽管质量较低,而速度较快的客户端可以获得完整质量的视频。

你可以use FFmpeg to do the transcoding and HLS playlist creation

我不确定 PLEX 或类似的东西是否能够动态地做到这一点,因为有数百个视频和新视频一直在添加。

至于何时您执行此转码,我想这取决于您正在查看的负载量。如果这只是一两个人查看文件,如果您的服务器可以跟上,您可以按需转码。理想情况下,您至少有几个流变体用于不太受欢迎的文件,并在以后根据需要添加更多变体。

如果您在现场进行此操作,我建议您预先进行所有转码。如果您需要恢复存储空间,您可以随时修剪旧文件/变体。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-15
    • 1970-01-01
    • 2016-09-16
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    相关资源
    最近更新 更多