c# - 从 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;
但是浏览器中没有显示任何内容。实现这一目标的最佳方法是什么?
解决方案
如果有人遇到,请回答我自己的问题。
CloudBlockBlob
(我正在使用的版本:11.2.2)现在有OpenReadAsync()
返回流的方法。在我的情况下,我将这个流返回到它自己videojs
处理Range
标题的地方。
推荐阅读
- spring-boot - 错误 9004 --- [restartedMain] oatomcat.jdbc.pool.ConnectionPool:无法创建池的初始连接
- r - 在一个文件夹中导入一个 Excel 的所有工作表,而不提及 Excel 名称
- position - 如何在选项卡栏中使用 Fab 按钮或定位选项卡按钮
- mysql - Mysql - 右连接没有检索到正确的数据
- javascript - Angular - ng-disabled 在范围更改后不起作用
- selenium - 从 selenium JAVA 中的动态列表框中选择项目
- c# - SPUtility.SendMail 不发送电子邮件
- ios - 如何为集合视图单元格内的视图添加手势?
- javascript - javascript通过使用反斜杠转义正斜杠来编码文本
- woocommerce - Woocommerce 短代码显示库存等于或高于所述价值的产品(再次更新)