如何在Azure Media Services API v3中使用现有Blob创建媒体资产
Azure Media Service v3 关联现有存储Blob编码方案
核心规则说明
- v3版本不强制要求将现有Blob复制到资产专属存储容器。只要源存储账户是挂载到Media Service实例下的关联存储账户,即可直接将现有容器/Blob绑定到资产使用,大文件场景下可以完全省掉复制带来的时间和存储成本。
- v3确实移除了v2版本的AssetFiles概念,资产实体直接映射到存储中的一个容器,容器内的块Blob会被资产自动识别,不需要单独创建文件关联实体、配置文件访问策略这些v2时代的冗余操作。
- 如果源Blob不在Media Service关联的存储账户下,甚至不需要提前创建资产,直接给源Blob生成带读权限的SAS URI,作为HTTP输入传给编码作业即可。
具体实现步骤
- 前置权限校验
如果源Blob在Media Service的关联存储账户内,默认服务托管标识已经有对应容器的读写权限,不需要额外配置;如果使用用户自定义托管标识,需要给标识授予源容器的「存储Blob数据读者」「存储Blob数据参与者」RBAC角色。 - 创建资产绑定现有容器
调用v3 SDK创建资产时,不要走空资产+本地上传的流程,直接指定现有存储信息即可,.NET SDK示例代码如下:
如果不希望编码作业修改源文件,可以给资产配置只读的容器访问权限,避免误操作覆盖原媒体文件。var mediaAsset = await amsClient.Assets.CreateOrUpdateAsync( resourceGroupName: "你的资源组名称", accountName: "你的Media Service账户名称", assetName: "自定义的资产名称", parameters: new Asset { StorageAccountName = "源Blob所在的存储账户名(需为AMS关联账户)", Container = "源Blob所在的容器名称", Description = "关联现有存储Blob创建的编码输入资产" } ); - 创建编码作业指定输入文件
配置作业输入时,直接选择上一步创建的资产,在输入配置的files参数中填入需要编码的Blob在容器内的相对路径(不需要带容器名前缀),后续按常规流程配置编码Transform、输出资产即可启动作业。
如果是跨存储账户的场景,不需要创建资产,直接构造JobInputHttp对象,填入源Blob的只读SAS URI即可作为作业输入,全程不需要做文件传输操作。
注意事项
- 不要直接将存储账户根容器、或者存放了大量非媒体文件的容器绑定到资产,否则服务扫描文件时会产生额外延迟,甚至因识别到不支持的文件导致作业失败,建议给待处理的媒体文件划分独立容器。
- 绑定现有容器创建资产后,容器内的文件增删操作会自动同步到资产,不需要手动刷新资产信息。
- 如果需要保留独立的文件副本,推荐使用存储服务端的异步Blob复制接口将源文件拷贝到资产默认容器,该操作走Azure内网传输,速度远高于本地下载重传的方式。
内容的提问来源于stack exchange,提问作者Matthieu Charbonnier
相关产品推荐
相关产品推荐

