如何在 PHP 中使用 Azure Blob 存储实现 video-streaming/ 分块编码?

How to implement video-streaming/ chunked encoding with Azure Blob Storage in PHP?

我尝试设置一个 php api 能够流式传输来自 Azure Blob 存储的“.mp4”视频。 我想要实现的是,在视频开始之前不必下载整个视频。 我正在为我的 Rest-API.

使用 Slim Framework 3

我已经实现了 "normal" 视频播放,但是视频真正开始播放需要很长时间。 我正在使用 PHP Sdk 的 Azure 存储来访问 Blob 存储,然后我获取 blob 并使用 "fpassthru" 在 http 响应中写入视频。 另外我设置了 "content-type" 和 "content-length" header.

$blob = $this->blobClient->getBlob($this->ContainerName, $filename);
fpassthru($blob->getContentStream());
$response = $response->withHeader('Content-type', 'video/mp4');

现在(大约 30 mb)视频开始播放需要很长时间,因为必须在视频开始之前下载所有数据。 我想知道是否可以启用某种 "chunked" 播放,当部分视频数据已经到达时开始播放。

我认为最好的方法是使用 HLS(RFC 8216) 实现流式传输您的视频。

这并不简单,因为您需要:

  • 提供获取索引文件的端点

  • 将你的 mp4 文件分解成更小的块,这些块可以由 HLS 支持玩家单独下载(我想现在大多数人都这样做)

  • 可能需要在内部管理块,因为每次用户请求视频(或部分视频)时都会破坏 mp4 的效率非常低。

另外,您可能想看看 hls-video-generater 之类的东西,或者您可能会找到的任何其他选择。

更新

如果您已经在使用 Azure,我建议您看一下 Media Services,它应该可以轻松满足您的需求。

希望对您有所帮助!