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

如何通过Python SDK实现Azure Media Service视频内容的下载交付

Azure Media Service 视频下载Python实现方案

该需求完全可以通过Python调用Azure Media Service的SDK或REST API实现,下面给出具体可落地的实现方案:

前置准备

  • 先在Azure Portal创建Media Service账户,获取订阅ID、资源组名、AMS账户名、租户ID、客户端ID、客户端密钥等核心认证信息
  • 若使用SDK方案,需提前安装依赖包:pip install azure-mgmt-media azure-identity requests
  • 若使用REST API方案,只需安装基础依赖:pip install requests

方案1:使用Azure Python SDK实现

实现逻辑:先完成Azure身份认证,再获取目标视频资产的下载定位器,生成SAS下载链接后写入本地即可,示例代码如下:

from azure.identity import ClientSecretCredential
from azure.mgmt.media import AzureMediaServices
import requests

# 以下参数替换为自身账户对应值
TENANT_ID = "你的租户ID"
CLIENT_ID = "你的客户端ID"
CLIENT_SECRET = "你的客户端密钥"
SUBSCRIPTION_ID = "你的订阅ID"
RESOURCE_GROUP_NAME = "你的资源组名"
AMS_ACCOUNT_NAME = "你的AMS账户名"
TARGET_ASSET_NAME = "待下载的视频资产名称"
LOCAL_SAVE_PATH = "./本地存储的视频文件名.mp4"

# 初始化认证和AMS客户端
credential = ClientSecretCredential(TENANT_ID, CLIENT_ID, CLIENT_SECRET)
ams_client = AzureMediaServices(credential, SUBSCRIPTION_ID)

# 获取资产关联的下载定位器,无现成定位器可调用create接口临时创建
locators = ams_client.assets.list_streaming_locators(
    resource_group_name=RESOURCE_GROUP_NAME,
    account_name=AMS_ACCOUNT_NAME,
    asset_name=TARGET_ASSET_NAME
)
download_locator = next(l for l in locators.streaming_locators if l.streaming_locator_type == "Download")

# 生成视频下载链接
paths = ams_client.streaming_locators.list_paths(
    resource_group_name=RESOURCE_GROUP_NAME,
    account_name=AMS_ACCOUNT_NAME,
    streaming_locator_name=download_locator.name
)
download_url = paths.download_paths[0].paths[0]

# 流式下载到本地
resp = requests.get(download_url, stream=True)
with open(LOCAL_SAVE_PATH, "wb") as f:
    for chunk in resp.iter_content(chunk_size=1024*1024):
        if chunk:
            f.write(chunk)

print("视频下载完成")

方案2:使用Azure REST API实现

无需安装AMS专属SDK,直接调用HTTP接口实现,示例代码如下:

import requests

# 以下参数替换为自身账户对应值
TENANT_ID = "你的租户ID"
CLIENT_ID = "你的客户端ID"
CLIENT_SECRET = "你的客户端密钥"
SUBSCRIPTION_ID = "你的订阅ID"
RESOURCE_GROUP_NAME = "你的资源组名"
AMS_ACCOUNT_NAME = "你的AMS账户名"
TARGET_ASSET_NAME = "待下载的视频资产名称"
LOCAL_SAVE_PATH = "./本地存储的视频文件名.mp4"

# 第一步:获取Azure接口访问令牌
token_url = f"https://login.microsoftonline.com/{TENANT_ID}/oauth2/token"
token_data = {
    "grant_type": "client_credentials",
    "client_id": CLIENT_ID,
    "client_secret": CLIENT_SECRET,
    "resource": "https://management.azure.com"
}
token_resp = requests.post(token_url, data=token_data)
access_token = token_resp.json()["access_token"]
req_headers = {"Authorization": f"Bearer {access_token}"}

# 第二步:获取目标资产的下载定位器
list_locator_url = f"https://management.azure.com/subscriptions/{SUBSCRIPTION_ID}/resourceGroups/{RESOURCE_GROUP_NAME}/providers/Microsoft.Media/mediaServices/{AMS_ACCOUNT_NAME}/assets/{TARGET_ASSET_NAME}/listStreamingLocators?api-version=2023-01-01"
locator_resp = requests.post(list_locator_url, headers=req_headers)
download_locator = next(l for l in locator_resp.json()["streamingLocators"] if l["streamingLocatorType"] == "Download")

# 第三步:获取视频下载路径
list_path_url = f"https://management.azure.com/subscriptions/{SUBSCRIPTION_ID}/resourceGroups/{RESOURCE_GROUP_NAME}/providers/Microsoft.Media/mediaServices/{AMS_ACCOUNT_NAME}/streamingLocators/{download_locator['name']}/listPaths?api-version=2023-01-01"
path_resp = requests.post(list_path_url, headers=req_headers)
download_url = path_resp.json()["downloadPaths"][0]["paths"][0]

# 第四步:下载到本地
resp = requests.get(download_url, stream=True)
with open(LOCAL_SAVE_PATH, "wb") as f:
    for chunk in resp.iter_content(chunk_size=1024*1024):
        if chunk:
            f.write(chunk)

常见注意事项

  • 下载定位器默认有过期时间,创建时可自定义过期时长,最长支持设置为1年
  • 若目标视频资产配置了加密,需先完成解密流程才能正常下载播放
  • 大文件下载建议自行添加断点续传逻辑,避免网络波动导致下载失败

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 06:27:00