如何绕过门户通过.NET/Python/CLI/API向Azure Media Services传视频?
绕过Azure门户向Azure Media Services上传视频文件的解决方案
CLI 上传流程
az ams asset create仅负责创建资产元数据,不会自动上传文件,完整流程如下:
- 创建空资产:
az ams asset create -a <AMS账户名> -g <资源组名> -n <目标资产名> - 获取资产的写入权限SAS URL:
az ams asset get-sas -a <AMS账户名> -g <资源组名> -n <资产名> --permissions Write --expiry 2024-12-31T23:59:59Z - 用Azure存储CLI上传文件:
容器名和存储账户名可通过az storage blob upload --container-name <资产关联存储容器名> --file <本地视频路径> --name <Blob文件名> --sas-token "<获取到的SAS令牌>" --account-name <存储账户名>az ams asset show -a <AMS账户名> -g <资源组名> -n <资产名>查看输出中的storageContainerName和storageAccountName字段。
.NET SDK(v3)上传流程
使用Azure.MediaServices和Azure.Storage.Blobs NuGet包:
using Azure; using Azure.MediaServices; using Azure.Storage.Blobs; using Azure.Identity; using System; using System.IO; using System.Threading.Tasks; var credential = new DefaultAzureCredential(); var amsClient = new MediaServicesClient(new Uri("https://<AMS账户名>.media.azure.net/"), credential); // 1. 创建资产 var asset = await amsClient.Assets.CreateOrUpdateAsync("<资源组名>", "<AMS账户名>", "<资产名>", new Asset()); // 2. 获取写入权限SAS URI var sasResponse = await amsClient.Assets.ListContainerSasAsync( "<资源组名>", "<AMS账户名>", "<资产名>", permissions: AssetContainerPermission.Write, expiryTime: DateTime.UtcNow.AddHours(4)); // 3. 上传视频文件 var containerClient = new BlobContainerClient(new Uri(sasResponse.AssetContainerSasUrls[0])); await containerClient.UploadBlobAsync("video.mp4", File.OpenRead(@"./local-video.mp4"));
Python SDK(v3)上传流程
依赖azure-mgmt-media和azure-storage-blobs包:
from azure.identity import DefaultAzureCredential from azure.mgmt.media import AzureMediaServices from azure.storage.blob import BlobContainerClient from datetime import datetime, timedelta credential = DefaultAzureCredential() ams_client = AzureMediaServices(credential, "<订阅ID>") # 1. 创建资产 asset = ams_client.assets.create_or_update("<资源组名>", "<AMS账户名>", "<资产名>", {}) # 2. 获取写入权限SAS URL sas_urls = ams_client.assets.list_container_sas( "<资源组名>", "<AMS账户名>", "<资产名>", permissions="Write", expiry_time=datetime.utcnow() + timedelta(hours=4) ) # 3. 上传视频文件 container_client = BlobContainerClient.from_container_url(sas_urls.asset_container_sas_urls[0]) with open("./local-video.mp4", "rb") as video_file: container_client.upload_blob("video.mp4", video_file)
REST API(v3)上传流程
创建资产:发送POST请求
- URL:
https://management.azure.com/subscriptions/<订阅ID>/resourceGroups/<资源组名>/providers/Microsoft.Media/mediaServices/<AMS账户名>/assets/<资产名>?api-version=2023-01-01 - 请求体:
{} - 认证:使用Azure AD Bearer令牌
- URL:
获取容器SAS:发送POST请求
- URL:
https://management.azure.com/subscriptions/<订阅ID>/resourceGroups/<资源组名>/providers/Microsoft.Media/mediaServices/<AMS账户名>/assets/<资产名>/listContainerSas?api-version=2023-01-01 - 请求体:
{ "permissions": "Write", "expiryTime": "2024-12-31T23:59:59Z" }
- URL:
上传文件:向SAS URL对应的容器发送PUT请求
- URL:
https://<存储账户名>.blob.core.windows.net/<容器名>/<Blob文件名>?<SAS令牌> - 请求体:视频文件二进制数据
- 头部:
Content-Type: video/mp4
- URL:
内容的提问来源于stack exchange,提问作者KGH
相关产品推荐
相关产品推荐

