首页 > 解决方案 > 从 Azure blob 存储和 ASP.NET Core 3 流式传输视频

问题描述

我正在使用最新和推荐Azure.Storage.Blobs的软件包。我将视频文件作为块上传,效果很好。现在的问题是将视频返回给 Web 客户端,即videojs. 播放器正在使用Range请求。

我的端点:

[HttpGet]
[Route("video/{id}")]
[AllowAnonymous]
public async Task<IActionResult> GetVideoStreamAsync(string id)
{
   var stream = await GetVideoFile(id);

   return File(stream, "video/mp4", true); // true is for enableRangeProcessing
}

还有我的GetVideoFile方法

var ms = new MemoryStream();
await blobClient.DownloadToAsync(ms, null, new StorageTransferOptions
{
    InitialTransferLength = 1024 * 1024,
    MaximumConcurrency = 20,
    MaximumTransferLength = 4 * 1024 * 1024
});

ms.Position = 0;

return ms;

视频被下载并流式传输就好了。但它下载了整个视频,根本不尊重Range。我也试过DownloadTo(HttpRange)

var ms = new MemoryStream();

// parse range header... 
var range = new HttpRange(from, to);
BlobDownloadInfo info = await blobClient.DownloadAsync(range);
await info.Content.CopyToAsync(ms);
return ms;

但是浏览器中没有显示任何内容。实现这一目标的最佳方法是什么?

标签: c#azureasp.net-coreazure-blob-storage

解决方案


如果有人遇到,请回答我自己的问题。

CloudBlockBlob(我正在使用的版本:11.2.2)现在有OpenReadAsync()返回流的方法。在我的情况下,我将这个流返回到它自己videojs处理Range标题的地方。


推荐阅读