使用asp.net核心和azure cloudblob的流媒体文件
我想创建一个端点,该端点将流式传输存储在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
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后,它开始按预期工作,因为他们添加了: