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

如何通过Azure Media Services为现有资产添加音轨?

为Azure Media Services现有资产添加多语言音轨的正确方案

你遇到的问题核心是未触发流媒体Manifest文件的重新生成——调用Tracks API仅更新了资产的.ism元数据文件,但客户端播放依赖的.ismc、HLS/DASH Manifest文件不会自动更新,必须手动触发刷新操作。

完整实现步骤

无论使用REST API还是.NET SDK,都需要完成以下流程:

  1. 将音频文件上传至目标资产的存储容器
  2. 调用Tracks接口注册音轨(你已完成此步骤)
  3. 刷新流媒体定位符对应的Manifest文件(关键遗漏步骤)
  4. 若使用CDN,清除对应缓存

REST API方案

步骤3:刷新Manifest文件

调用Streaming Locators - Refresh Manifest接口,重新生成客户端播放所需的Manifest文件:

POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Media/mediaServices/{accountName}/streamingLocators/{streamingLocatorName}/refreshManifest?api-version=2023-01-01

请求无需额外Body,成功响应后,资产的.ismc、_manifest.json文件会被更新。

验证播放

重新获取流媒体定位符的播放路径,或刷新客户端播放地址的缓存,即可看到新增的音轨选项。


.NET SDK方案(使用Azure.ResourceManager.Media)

1. 上传音频文件到资产

// 获取目标资产
var asset = await mediaServicesClient.Assets.GetAsync(resourceGroupName, accountName, assetName);

// 获取资产容器的SAS链接
var containerSas = await mediaServicesClient.Assets.ListContainerSasAsync(
    resourceGroupName, accountName, assetName,
    permissions: AssetContainerPermission.ReadWrite,
    expiryTime: DateTime.UtcNow.AddHours(1));

// 上传音频文件
var blobContainerClient = new BlobContainerClient(new Uri(containerSas.Value.AssetContainerSasUrls.First()));
await using var fileStream = File.OpenRead("audio4.mp4");
await blobContainerClient.UploadBlobAsync("audio4.mp4", fileStream);

2. 注册音频轨道

// 创建音频轨道数据
var audioTrack = new AudioTrackData
{
    FileName = "audio4.mp4",
    LanguageCode = "eng",
    Mpeg4TrackId = 4 // 确保与现有轨道ID不冲突
};

// 注册轨道到资产
await asset.GetTracks().CreateOrUpdateAsync(
    WaitUntil.Completed,
    "english-audio-track", // 轨道唯一名称
    new TrackData(audioTrack)
);

3. 刷新Manifest文件

// 获取目标流媒体定位符
var streamingLocator = await mediaServicesClient.StreamingLocators.GetAsync(
    resourceGroupName, accountName, streamingLocatorName);

// 刷新Manifest
await streamingLocator.RefreshManifestAsync(WaitUntil.Completed);

4. 获取更新后的播放地址

var paths = await streamingLocator.ListPathsAsync();
var hlsPlaybackUrl = paths.Value.StreamingPaths
    .First(p => p.StreamingProtocol == StreamingPolicyStreamingProtocol.Hls)
    .Paths.First();

额外注意事项

  • 音频文件需与原视频兼容:建议使用MP4封装、AAC编码,确保轨道参数(如采样率、声道数)与原视频匹配
  • Mpeg4TrackId需唯一,避免与资产中现有轨道ID冲突
  • 若配置了CDN,需清除对应播放路径的CDN缓存,否则客户端会继续加载旧的Manifest文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 23:00:53