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

Azure Media Services:通过C#将Blob程序化转码为Asset

Azure Media Services Blob转码为Asset的C#实现示例

准备工作

  • 安装所需NuGet包:
    • Azure.ResourceManager.Media(Azure媒体服务最新管理SDK)
    • Azure.Identity(用于身份认证)

完整代码示例

using Azure;
using Azure.Identity;
using Azure.ResourceManager.Media;
using Azure.ResourceManager.Media.Models;
using System;
using System.Threading.Tasks;

class MediaServicesTranscoder
{
    public async Task TranscodeBlobToAssetAsync()
    {
        // 替换为你的实际配置参数
        string subscriptionId = "你的订阅ID";
        string resourceGroupName = "资源组名称";
        string mediaAccountName = "媒体服务账户名称";
        string storageAccountName = "AMS关联的存储账户名称";
        string blobContainerName = "Blob容器名";
        string sourceBlobName = "已上传的MP4文件名(如video.mp4)";
        string inputAssetName = "input-asset-" + Guid.NewGuid();
        string outputAssetName = "output-asset-" + Guid.NewGuid();
        string transformName = "h264-transcode-transform";
        string jobName = "transcode-job-" + Guid.NewGuid();

        // 初始化媒体服务客户端
        var credential = new DefaultAzureCredential();
        var mediaClient = new MediaServicesArmClient(credential, subscriptionId);
        var mediaAccount = mediaClient.GetMediaServicesAccount(resourceGroupName, mediaAccountName);

        // 1. 创建关联现有Blob的输入Asset
        var inputAssetData = new MediaAssetData
        {
            StorageAccountName = storageAccountName,
            AlternateId = $"https://{storageAccountName}.blob.core.windows.net/{blobContainerName}/{sourceBlobName}",
            Description = "从Blob导入的输入资源"
        };
        var inputAsset = await mediaAccount.GetMediaAssets()
            .CreateOrUpdateAsync(WaitUntil.Completed, inputAssetName, inputAssetData);

        // 2. 创建用于存储转码结果的输出Asset
        var outputAssetData = new MediaAssetData
        {
            Description = "转码后的输出资源"
        };
        var outputAsset = await mediaAccount.GetMediaAssets()
            .CreateOrUpdateAsync(WaitUntil.Completed, outputAssetName, outputAssetData);

        // 3. 创建或获取转码Transform(使用内置H264多比特率预设)
        var transformData = new MediaTransformData
        {
            Description = "H264多比特率转码预设",
            Outputs =
            {
                new MediaTransformOutput(
                    new BuiltInStandardEncoderPreset(BuiltInStandardEncoderPresetName.H264MultipleBitrate1080p)
                    {
                        OnError = MediaTransformOnError.StopProcessingJob,
                        RelativePriority = MediaTransformOutputPriority.Normal
                    }
                )
            }
        };
        var transform = await mediaAccount.GetMediaTransforms()
            .CreateOrUpdateAsync(WaitUntil.Completed, transformName, transformData);

        // 4. 创建并提交转码作业
        var jobInput = new JobInputAsset(inputAsset.Name);
        var jobOutput = new JobOutputAsset(outputAsset.Name);
        var jobData = new JobData
        {
            Input = jobInput,
            Outputs = { jobOutput }
        };
        var job = await transform.GetJobs()
            .CreateOrUpdateAsync(WaitUntil.Started, jobName, jobData);

        // 5. 轮询监控作业状态
        Job currentJob;
        do
        {
            await Task.Delay(TimeSpan.FromSeconds(10));
            currentJob = await job.GetAsync();
            Console.WriteLine($"当前作业状态: {currentJob.State}");
        } while (currentJob.State is JobState.Queued or JobState.Processing);

        if (currentJob.State == JobState.Finished)
        {
            Console.WriteLine("转码作业已完成!输出Asset已生成。");
        }
        else
        {
            var error = currentJob.Outputs[0].Error;
            Console.WriteLine($"转码作业失败,状态: {currentJob.State},错误信息: {error?.Message}");
        }
    }
}

关键说明

  • 身份认证:DefaultAzureCredential自动适配本地开发(Visual Studio/Azure CLI登录)和生产环境(托管标识),若需使用服务主体认证,可替换为ClientSecretCredential。
  • 输入Asset关联Blob:通过AlternateId指定Blob的完整URL,AMS会直接关联该Blob,无需重复上传。注意Blob必须存储在AMS关联的存储账户中。
  • 转码预设:示例使用内置的H264MultipleBitrate1080p预设,可根据需求替换为其他内置预设(如H264SingleBitrate720p),或自定义StandardEncoderPreset实现特定编码需求。
  • 作业监控:示例采用轮询方式跟踪状态,生产环境建议使用Azure Event Grid接收作业状态变更通知,避免频繁轮询。

权限要求

确保执行代码的身份(本地用户/托管标识)拥有以下权限:

  • 媒体服务账户的Media Services Contributor角色
  • 关联存储账户的Storage Blob Data Contributor角色

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 12:20:35