存储可以从中间播放的视频

Storing video that can be played from the middle

我正在使用 Azure Blob 存储来存储视频。我希望用户能够将视频滚动到任何时间点并从那里播放。

对于短视频,没有问题,因为整个视频都可以加载,你可以这样做,但对于较大的视频,它似乎不是开箱即用的。从某种意义上说,这是有道理的——默认情况下,文件没有从中间下载的功能。但是所有体面的视频流媒体网站都提供此功能。我一定是遗漏了一些视频概念,如果有人将我链接到一些解释此类事情是如何完成的文章,我将不胜感激。如果解决方案使用 Microsoft Azure,则加分。

大型视频示例(28 秒,126MB): https://www.w3schools.com/code/tryit.asp?filename=GP328W3SEY77

小视频示例(10 秒,1MB): https://www.w3schools.com/html/tryit.asp?filename=tryhtml5_video

视频流服务器或云服务通常是专门的专用服务器,它们的功能可能非常复杂。

一个视频 'file' 通常由 'container' 中的一个或多个视频和音频轨道组成,例如 MP4。容器将包含 header 信息和指向轨道信息的指针。

如果您的服务器支持范围请求,即一次下载部分文件,并且 header 信息位于视频文件的开头,则 mp4 文件的简单 HTTP 流是可能的 - 在mp4是不是一般默认在结尾,但是可以移到开头。

更复杂的流媒体服务器,包括 most/all 流行的商业服务,使用专用的流媒体协议,如今通常是 ABR HLS 或 DASH。这些提供视频的多个不同比特率版本的分块,并允许客户端在其下载的每个块的比特率之间切换 - 请在此处查看更多信息:https://whosebug.com/a/42365034/334402

当您沿视频时间轴滚动时看到的缩略图实际上通常是视频文件或流中的单独轨道。它们是一组时间点的图像,并且可以在播放开始时快速下载整组缩略图,以查看如果用户想要跳转到视频的特定部分会是什么样子。当用户实际跳转到视频的那个部分时,客户端会向服务器请求与该缩略图对应的文件块或部分。

A​​zure CDN 实际上提供了一些不错的功能:

  • 视频立即开始播放(浏览器无需等待视频完全加载)
  • 您可以及时滚动back/forward。

(很明显,这除了多PoP、缓存等标准CDN功能外)

上述 CDN 设置已在 Standard Microsoft 上进行了测试,但 VerizonAkamai 似乎提供了类似的功能。