在 Blazor 组件 Web 服务器 c# 中从 AzureBlob 流式传输视频
stream video from AzureBlob in Blazor component Web Server c#
我正在开发一项功能,我想从 azure blob 流式传输视频。视频文件已经上传到 azureBlob,我可以使用 blob URI,但我的 blob 被压缩了,所以我无法直接从 Blob URI 流式传输视频.出于这个原因,我从 azure 存储中获取了 blob,将其解压缩并获得了视频的实际内存流。现在我想播放该流中的视频。
我研究了一下,发现从JS可以实现。但我不想使用 js 片段来 运行 这个。是否有任何 balzor web 组件可以实现这一点。我也尝试使用 Nuget 中的 blazored.video 库,但我仍然没有发现太大帮助。
@using Blazored.Video
@using Blazored.Video.Support
@if (File != null)
{
<BlazoredVideo class="w-100"
style="max-width:800px;"
controls="controls">
<source src="@File.FileUri" type="video/mp4" />
</BlazoredVideo>
}
我找到了实现此目的的方法它只需要我创建一个网络 API,returns 我的视频的内容流。
我按照这个例子在我的 Web 中处理流式传输 API
我的作品
Page.razor
<BlazoredVideo class="w-100"
style="max-width:800px;"
controls="controls">
<source src="api/Blob/PlayVideo" type="video/mp4" />
</BlazoredVideo>
API端点
[HttpGet("api/Blob/PlayVideo")]
[AllowAnonymous]
public async Task<IActionResult> AnonymousPlayVideoAsync()
{
var cloudBlob = await _azureBlobStorageService.RetrieveBlobiAsync("Test.mp4");
var stream = new MemoryStream();
await cloudBlob.DownloadToStreamAsync(stream);
//.. Decompression of Stream comes here
var result= new FileContentResult(stream.ToArray(), "video/mp4");
result.EnableRangeProcessing = true;
return result;
}
我正在开发一项功能,我想从 azure blob 流式传输视频。视频文件已经上传到 azureBlob,我可以使用 blob URI,但我的 blob 被压缩了,所以我无法直接从 Blob URI 流式传输视频.出于这个原因,我从 azure 存储中获取了 blob,将其解压缩并获得了视频的实际内存流。现在我想播放该流中的视频。 我研究了一下,发现从JS可以实现。但我不想使用 js 片段来 运行 这个。是否有任何 balzor web 组件可以实现这一点。我也尝试使用 Nuget 中的 blazored.video 库,但我仍然没有发现太大帮助。
@using Blazored.Video
@using Blazored.Video.Support
@if (File != null)
{
<BlazoredVideo class="w-100"
style="max-width:800px;"
controls="controls">
<source src="@File.FileUri" type="video/mp4" />
</BlazoredVideo>
}
我找到了实现此目的的方法它只需要我创建一个网络 API,returns 我的视频的内容流。
我按照这个例子在我的 Web 中处理流式传输 API
我的作品
Page.razor
<BlazoredVideo class="w-100"
style="max-width:800px;"
controls="controls">
<source src="api/Blob/PlayVideo" type="video/mp4" />
</BlazoredVideo>
API端点
[HttpGet("api/Blob/PlayVideo")]
[AllowAnonymous]
public async Task<IActionResult> AnonymousPlayVideoAsync()
{
var cloudBlob = await _azureBlobStorageService.RetrieveBlobiAsync("Test.mp4");
var stream = new MemoryStream();
await cloudBlob.DownloadToStreamAsync(stream);
//.. Decompression of Stream comes here
var result= new FileContentResult(stream.ToArray(), "video/mp4");
result.EnableRangeProcessing = true;
return result;
}