使用 Azure 媒体服务和 Asp.Net Core 上传和管理媒体文件的最佳方式

Posted

技术标签:

【中文标题】使用 Azure 媒体服务和 Asp.Net Core 上传和管理媒体文件的最佳方式【英文标题】:Best way to upload and manage media files with Azure Media Services ad Asp.Net Core 【发布时间】:2021-09-17 23:57:59 【问题描述】:

我对 Azure 和 Azure 媒体服务非常陌生,所以我对媒体上传、存储和管理有很多疑问。这是场景:

我正在使用 Asp.Net Core 创建一个 API,允许用户上传视频、音频和图像。因此,用户可以通过缩略图查看上传的视频、图像和音频列表。 现在我只负责视频上传。上传视频后,我会创建一个缩略图,该缩略图存储到与资产相关联的 Container 中(使用自定义 TransformOutput )。我正在关注官方文档:https://docs.microsoft.com/it-it/azure/media-services/latest/stream-files-tutorial-with-api。

因此,每次用户上传视频时,都会创建一个资产和一个容器。进入容器有缩略图并且容器是私有的,所以没有 SAS Key 就无法访问文件。还有一些我有疑问的地方:

服务器端我必须创建一个带有缩略图的列表,每个缩略图都存储在一个包含视频文件、元数据等的私有容器中,但我不能将整个容器公开,因为我不想允许直接访问视频,但只允许访问缩略图。

也许最好的解决方案是将缩略图分离到另一个公共容器中?

我最初的想法是为每个用户创建 4 个容器:

User_X_VideoContainer(私有) User_X_AudioContainer(私有) User_X_ThumbnailsContainer(公共) User_X_ImagesContainer(公共)

所以当用户上传视频时,我可以将视频存储到 User_X_VideoContainerThumbnailUser_X_ThumnailsContainer 并使用不同级别的访问权限单个容器。但我不知道这是否是一个好习惯,因为 Azure 媒体服务首先创建一个资产,然后创建一个包含所有内容的容器。那么,Witch 是存储和管理具有不同级别访问权限的用户文件的最佳方式吗?

谢谢!

【问题讨论】:

【参考方案1】:

我建议将公共数据存储在另一个存储帐户中以获得更好的安全性(并使用 Azure CDN 缓存内容)。此存储帐户可以附加到您的 AMS 帐户,因此您可以根据 AMS 转换将此存储帐户指定为作业中缩略图输出的目标。 Thumbnail output documentation.

【讨论】:

好的,谢谢。但是,有一种方法可以将缩略图保存在自定义容器中吗?现在,使用此示例 (docs.microsoft.com/en-us/azure/media-services/latest/…) 将缩略图保存到连接到资产的容器中。但是这个容器是私有的并且包含视频文件。那么我可以将缩略图保存在自定义容器中吗? 我认为这是在另一个容器中复制 blob 的唯一方法:docs.microsoft.com/it-it/azure/storage/blobs/…

以上是关于使用 Azure 媒体服务和 Asp.Net Core 上传和管理媒体文件的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章

azure 应用服务和 asp.net 核心:CORS 策略甚至 AllowAnyOrigin 也阻止了来源

在 ASP.NET 核心应用中本地模拟 Azure 应用服务授权

使用 ASP.NET 标识和 JWT 令牌的 Azure 函数身份验证

ASP.NET Core Web 应用程序作为 Azure 服务总线使用者/接收器

Azure 云服务上的 Asp.Net Core MVC?

在 Blazor 中同时使用 ASP.Net Core Identity 和 Azure 身份验证