默认情况下,Azure Blob存储是否支持部分内容206?

vs91vp4v  于 2022-12-04  发布在  其他
关注(0)|答案(4)|浏览(151)

我正在使用Azure blob存储来存储我所有的图像和视频。我已经实现了上传和获取功能,它运行得相当不错。我在加载视频时遇到了1个问题,因为当我使用在Azure blob存储上上传视频后生成的URL时,它会先下载所有内容,然后再呈现给用户。因此,如果视频大小为100 MB,它会下载所有的100 MB,直到比用户将无法看到视频.
我做了大量的研发工作,发现在渲染视频时,我需要获取部分内容(状态206),而不是一次获取整个视频。在添加请求头“Range:bytes-500”后,我尝试点击博客网址,但它仍然在下载整个内容。因此,我检查了一些开源视频网址,并尝试点击视频网址和“Range”请求头,它成功地给出了206响应状态,这意味着它正确地给了我部分内容,而不是完整的视频。
我看了一些论坛,他们说Azure存储支持部分内容概念,需要从属性中启用它。但我已经检查了Azure存储帐户下的所有选项,但没有找到任何启用此功能的内容。
有人能帮我解决这个问题吗?或者Azure门户上有什么我需要启用的东西吗?这是我一周以来一直在做的研发工作。任何帮助都将不胜感激。
谢谢注意安全。

lhcgjxsq

lhcgjxsq1#

假设Accept-Ranges没有启用,从这个blog我得到了它需要的set the default version of the service
下面是实现它的示例代码。

var credentials = new StorageCredentials("account name", "account key");
            var account = new CloudStorageAccount(credentials, true);
            var client = account.CreateCloudBlobClient();
            var properties = client.GetServiceProperties();
            properties.DefaultServiceVersion = "2019-07-07";
            client.SetServiceProperties(properties);

下面是设定属性后的传回信头比较。

之前

之后

rxztt3cl

rxztt3cl2#

假设视频内容是MPEG-4,问题可能是媒体本身需要将moov原子的位置从文件的末尾更改到文件的开头。浏览器在找到文件中的moov原子之前不会渲染视频,因此您需要确保原子位于文件的开头,这可以通过使用ffmpeg和"快速启动"来实现。下面是一篇很好的文章,其中包含更多细节:HERE

kxe2p93d

kxe2p93d3#

下面是我用来下载内容的SDK:

var container = new BlobContainerClient("UseDevelopmentStorage=true", "sample-container");
await container.CreateIfNotExistsAsync();
BlobClient blobClient = container.GetBlobClient(fileName);
Stream stream = new MemoryStream();
var result = await blobClient.DownloadToAsync(stream, cancellationToken: ct);

它会立即下载整个文件!不幸的是,其他答案中提供的解决方案似乎引用了另一个SDK?因此,对于我使用的SDK,解决方案是使用方法OpenReadAsync

long kBytesToReadAtOnce = 300;
        long bytesToReadAtOnce = kBytesToReadAtOnce * 1024;
        //int mbBytesToReadAtOnce = 1;
        var result = await blobClient.OpenReadAsync(0, bufferSize: (int)bytesToReadAtOnce, cancellationToken: ct);

默认情况下-它获取4 MB的数据,所以如果你想让你的应用有更小的内存占用量,你必须将该值覆盖为更小的数量。
我认为SDK在内部发送的请求已经设置了字节范围。因此,您所要做的就是在Web API中启用部分内容支持,如下所示:

return new FileStreamResult(result, contentType)
        {
            EnableRangeProcessing = true,
        };
4xrmg8kj

4xrmg8kj4#

使用Azure CLI
刚跑:

az storage account blob-service-properties update --default-service-version 2021-08-06 -n yourstorageaccount -g yourresourcegroup

相关问题