C# 使用Azure Blob存储中的.Net核心API异步流式传输视频
我发现了一些示例,它们使用的对象在我的应用程序中不可用,并且似乎与我的.NET Core web API版本不匹配。本质上,我正在做一个在网页上有标签的项目,希望使用来自服务器的流来加载视频,而不是通过路径直接为文件提供服务。一个原因是文件的来源可能会发生变化,通过path提供这些文件并不是我的客户想要的。所以我需要能够打开一个流并异步写入视频文件 出于某种原因,这会生成JSON数据,所以这是错误的。我正在从Azure Blob存储下载视频文件并以流的形式返回,但我不明白要将流式视频文件发送到HTML中的标记需要做什么 我的API控制器C# 使用Azure Blob存储中的.Net核心API异步流式传输视频,c#,azure,html5-video,asp.net-core-webapi,azure-blob-storage,C#,Azure,Html5 Video,Asp.net Core Webapi,Azure Blob Storage,我发现了一些示例,它们使用的对象在我的应用程序中不可用,并且似乎与我的.NET Core web API版本不匹配。本质上,我正在做一个在网页上有标签的项目,希望使用来自服务器的流来加载视频,而不是通过路径直接为文件提供服务。一个原因是文件的来源可能会发生变化,通过path提供这些文件并不是我的客户想要的。所以我需要能够打开一个流并异步写入视频文件 出于某种原因,这会生成JSON数据,所以这是错误的。我正在从Azure Blob存储下载视频文件并以流的形式返回,但我不明白要将流式视频文件发送到H
[AllowAnonymous]
[HttpGet("getintroductoryvideos")]
public async Task<Stream> GetIntroductoryVideos()
{
try
{
return _documentsService.WriteContentToStream().Result;
}
catch (Exception ex)
{
throw ex;
}
}
我的服务班
public async Task<Stream> WriteContentToStream()
{
var cloudBlob = await _blobService.GetBlobAsync(PlatformServiceConstants._blobIntroductoryVideoContainerPath + PlatformServiceConstants.IntroductoryVideo1, introductoryvideocontainerName);
await cloudBlob.FetchAttributesAsync();
var fileStream = new MemoryStream();
await cloudBlob.DownloadToStreamAsync(fileStream);
return fileStream;
}
您可以尝试以下代码: API控制器:
[AllowAnonymous]
[HttpGet("getintroductoryvideos")]
public async Task<FileContentResult> GetIntroductoryVideos(string videoname)
{
return await _documentsService.WriteContentToStream();
}
服务类别:
public async Task<FileContentResult> WriteContentToStream()
{
var cloudBlob = await _blobService.GetBlobAsync(PlatformServiceConstants._blobIntroductoryVideoContainerPath + PlatformServiceConstants.IntroductoryVideo1, introductoryvideocontainerName);
MemoryStream fileStream = new MemoryStream();
await cloudBlob.DownloadToStreamAsync(fileStream);
return new FileContentResult (fileStream.ToArray(), "application/octet-stream");
}
Html:
您可以尝试以下代码: API控制器:
[AllowAnonymous]
[HttpGet("getintroductoryvideos")]
public async Task<FileContentResult> GetIntroductoryVideos(string videoname)
{
return await _documentsService.WriteContentToStream();
}
服务类别:
public async Task<FileContentResult> WriteContentToStream()
{
var cloudBlob = await _blobService.GetBlobAsync(PlatformServiceConstants._blobIntroductoryVideoContainerPath + PlatformServiceConstants.IntroductoryVideo1, introductoryvideocontainerName);
MemoryStream fileStream = new MemoryStream();
await cloudBlob.DownloadToStreamAsync(fileStream);
return new FileContentResult (fileStream.ToArray(), "application/octet-stream");
}
Html:
您可能希望避免在返回之前将整个视频加载到内存中。您应该能够使用FileStreamResult通过流:
您可能希望避免在返回之前将整个视频加载到内存中。您应该能够使用FileStreamResult通过流:
此功能也可以正常工作,但无法转发视频。而且有点慢。我认为我们需要启用Http范围。此功能也可以正常工作,但无法转发视频。而且有点慢。我认为我们需要启用Http Range.Small更新,我们需要启用RangeProcessing,即var result=new FileContentResultmemStream.ToArray,application/octet stream;result.EnableRangeProcessing=true;这是什么?\u blobService是我的服务类,您继承AzureSmall更新的实际blob容器,我们需要启用范围处理,即var result=new FileContentResultmemStream.ToArray,application/octet stream;result.EnableRangeProcessing=true;这是什么?这是什么?这是我的服务类,您在其中继承Azure的实际blob容器这是什么?这是什么?