使用asp.net核心和azure cloudblob的流媒体文件

使用asp.net核心和azure cloudblob的流媒体文件,azure,asp.net-core,azure-storage-blobs,Azure,Asp.net Core,Azure Storage Blobs,我想创建一个端点,该端点将流式传输存储在azure CloudBlob中的视频流。以下是我的代码片段: public async Task<IActionResult> GetVideo(string videoId) { var videoStream = await _contentStorage.Get(videoId); var fileStreamResult = new FileStreamResult(videoStre

我想创建一个端点,该端点将流式传输存储在azure CloudBlob中的视频流。以下是我的代码片段:

    public async Task<IActionResult> GetVideo(string videoId)
    {
        var videoStream = await _contentStorage.Get(videoId);

        var fileStreamResult = new FileStreamResult(videoStream, mimeType);
        fileStreamResult.EnableRangeProcessing = true;
        return fileStreamResult;
    }
公共异步任务GetVideo(字符串videoId) { var videoStream=wait_contentStorage.Get(videoId); var fileStreamResult=新的fileStreamResult(视频流,mimeType); fileStreamResult.EnableRangeProcessing=true; 返回fileStreamResult; } 并且在内容存储中

   public async Task<StoredContent> Get(string id)
    {
        var block = _blobContainer.GetBlobClient(id);
        var ms = await block.OpenReadAsync();
        return ms;
    }
公共异步任务获取(字符串id)
{
var block=\u blobContainer.GetBlobClient(id);
var ms=await block.OpenReadAsync();
返回ms;
}
除了iPhone和safari之外,我所有的东西都工作得很好,经过一些调试,我的端点返回了200个http代码,但应该是206个部分内容。所以我对代码做了一些更改,下面是一些代码片段:

    public async Task<IActionResult> GetVideo(string videoId)
    {
        var videoStream = await _contentStorage.Get(videoId);

        var ms = new MemoryStream();
        await videoStream.CopyToAsync(ms);

        var fileStreamResult = new FileStreamResult(ms, mimeType);
        fileStreamResult.EnableRangeProcessing = true;
        return fileStreamResult;
    }
公共异步任务GetVideo(字符串videoId) { var videoStream=wait_contentStorage.Get(videoId); var ms=新内存流(); 等待videoStream.CopyToAsync(毫秒); var fileStreamResult=新fileStreamResult(ms,mimeType); fileStreamResult.EnableRangeProcessing=true; 返回fileStreamResult; } 现在,当我在iphone或邮递员上测试它时,响应是206,并且工作正常。但我认为将视频流压缩到新的内存流是一种有效的方法

如果我错了,请纠正我,但我理解此代码,因为对于视频的每一部分,我都从blob存储下载整个视频,剪切它,然后返回范围内的片段


我不确定如何处理这种情况,是否有现成的解决方案,或者我是否需要从请求中读取范围标头,并使用OpenReadAsync和参数作为位置和缓冲区端?或者还有其他方法?

我的解决方案是更新Azure.Storage.Blobs库。我有12.6.0,升级到12.7.0后,它开始按预期工作,因为他们添加了: