You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过JobId或SmoothStreamingUrl获取Azure Media Services的输入/输出资产

借助JobId或SmoothStreamingUrl获取Azure Media Services资产名称及存储位置

一、通过JobId获取输入/输出资产信息

你可以通过JobId直接查询对应的Job资源,从Job的输入和输出属性中关联到对应资产,进而获取资产名称和存储位置。以下是使用Azure.ResourceManager.Media包的实现代码:

using Azure;
using Azure.ResourceManager;
using Azure.ResourceManager.Media;
using Azure.ResourceManager.Media.Models;

// 初始化ArmClient
var armClient = new ArmClient(new DefaultAzureCredential());
// 替换为你的Azure订阅ID、资源组名称、媒体服务账户名称
var subscriptionId = "your-subscription-id";
var resourceGroupName = "your-resource-group-name";
var mediaAccountName = "your-media-account-name";
// 替换为目标JobId
var jobId = "nb:jid:UUID:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx";

// 获取媒体服务账户资源
var mediaAccountResourceId = MediaServicesAccountResource.CreateResourceIdentifier(subscriptionId, resourceGroupName, mediaAccountName);
var mediaAccount = armClient.GetMediaServicesAccountResource(mediaAccountResourceId);

// 获取Job资源
JobResource job = await mediaAccount.GetJobAsync(jobId);

// 获取输入资产信息
if (job.Data.Input is JobInputAsset inputAsset)
{
    string inputAssetName = inputAsset.AssetName;
    Console.WriteLine($"输入资产名称: {inputAssetName}");
    
    // 获取输入资产的存储容器信息
    AssetResource inputAssetResource = await mediaAccount.GetAssetAsync(inputAssetName);
    string storageContainer = inputAssetResource.Data.Container;
    Console.WriteLine($"输入资产存储容器: {storageContainer}");
}

// 获取输出资产信息
foreach (JobOutput output in job.Data.Outputs)
{
    if (output is JobOutputAsset outputAsset)
    {
        string outputAssetName = outputAsset.AssetName;
        Console.WriteLine($"输出资产名称: {outputAssetName}");
        
        // 获取输出资产的存储容器信息
        AssetResource outputAssetResource = await mediaAccount.GetAssetAsync(outputAssetName);
        string storageContainer = outputAssetResource.Data.Container;
        Console.WriteLine($"输出资产存储容器: {storageContainer}");
    }
}

关键说明:

  • 确保已通过DefaultAzureCredential完成身份验证(本地开发可通过Azure CLI、Visual Studio等方式登录)
  • Job的输入类型可能为JobInputAsset、JobInputHttp等,需根据实际场景判断类型,这里仅处理JobInputAsset的情况
  • 从Asset资源的Container属性可直接得到存储账户中的容器名称,结合存储账户信息即可定位文件存储位置

二、通过SmoothStreamingUrl获取资产信息

SmoothStreamingUrl中包含了Streaming Locator的ID,你可以通过该ID查询到对应的Locator资源,进而关联到目标资产:

using Azure;
using Azure.ResourceManager;
using Azure.ResourceManager.Media;
using System;

// 初始化ArmClient
var armClient = new ArmClient(new DefaultAzureCredential());
var subscriptionId = "your-subscription-id";
var resourceGroupName = "your-resource-group-name";
var mediaAccountName = "your-media-account-name";
// 替换为目标SmoothStreamingUrl
var smoothStreamingUrl = "http://testvideo-euno.streaming.media.azure.net/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxxxxxxx-xxxx-xxxx-xxxx-xxxx.ism/manifest|";

// 从URL中提取Streaming Locator ID(域名后的第一个UUID部分)
Uri uri = new Uri(smoothStreamingUrl);
string locatorId = uri.AbsolutePath.Split('/')[1];

// 获取媒体服务账户资源
var mediaAccountResourceId = MediaServicesAccountResource.CreateResourceIdentifier(subscriptionId, resourceGroupName, mediaAccountName);
var mediaAccount = armClient.GetMediaServicesAccountResource(mediaAccountResourceId);

// 获取Streaming Locator资源
StreamingLocatorResource locator = await mediaAccount.GetStreamingLocatorAsync(locatorId);

// 获取关联的资产信息
string assetName = locator.Data.AssetName;
Console.WriteLine($"关联资产名称: {assetName}");

// 获取资产的存储容器信息
AssetResource assetResource = await mediaAccount.GetAssetAsync(assetName);
string storageContainer = assetResource.Data.Container;
Console.WriteLine($"资产存储容器: {storageContainer}");

关键说明:

  • SmoothStreamingUrl的格式为{streaming-endpoint}/{locator-id}/{asset-name}.ism/manifest,因此可通过路径分割提取Locator ID
  • 一个Streaming Locator仅关联一个资产,因此可直接从Locator资源中获取资产名称
  • 若URL中存在额外参数(如示例中的|),需先清理再解析

常见问题排查

  • 若出现权限错误:确保当前身份拥有Media Services Contributor或对应资源的读取权限
  • 若Job或Locator不存在:确认资源未被删除,且媒体服务账户、资源组信息填写正确
  • 若Asset的Container属性为空:部分旧资产可能未记录容器信息,可通过媒体服务账户关联的存储账户,根据资产名称匹配容器(通常容器名称与资产名称一致)

内容的提问来源于stack exchange,提问作者Frank-Medium

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 11:43:33