gpt4 book ai didi

azure - 使用 asp.net core 和 azure cloudblob 流媒体文件

转载 作者:行者123 更新时间:2023-12-03 02:31:38 28 4
gpt4 key购买 nike

我想创建端点来传输存储在 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;
}

在 ContentStorage 中

   public async Task<StoredContent> Get(string id)
{
var block = _blobContainer.GetBlobClient(id);
var ms = await block.OpenReadAsync();
return 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;
}

现在,当我在 iPhone 上或通过 postman 测试它时,响应是 206,并且工作正常。但我认为将视频流复制到新的内存流中是一种有效的方法。

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

我不确定如何处理这种情况,是否有任何开箱即用的解决方案,或者我是否需要从请求中读取范围 header 并使用 OpenReadAsync 并将参数作为位置和缓冲区?或者还有别的办法吗?

最佳答案

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

Added seekability to BaseBlobClient.OpenRead().

关于azure - 使用 asp.net core 和 azure cloudblob 流媒体文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64878693/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com