Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用Azure Blob存储中的.Net核心API异步流式传输视频_C#_Azure_Html5 Video_Asp.net Core Webapi_Azure Blob Storage - Fatal编程技术网

C# 使用Azure Blob存储中的.Net核心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

我发现了一些示例,它们使用的对象在我的应用程序中不可用,并且似乎与我的.NET Core web API版本不匹配。本质上,我正在做一个在网页上有标签的项目,希望使用来自服务器的流来加载视频,而不是通过路径直接为文件提供服务。一个原因是文件的来源可能会发生变化,通过path提供这些文件并不是我的客户想要的。所以我需要能够打开一个流并异步写入视频文件

出于某种原因,这会生成JSON数据,所以这是错误的。我正在从Azure Blob存储下载视频文件并以流的形式返回,但我不明白要将流式视频文件发送到HTML中的标记需要做什么

我的API控制器

[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容器这是什么?这是什么?