如何在 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,它应该可以轻松满足您的需求。
希望对您有所帮助!
我尝试设置一个 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,它应该可以轻松满足您的需求。
希望对您有所帮助!