让我猜。之前,您按照官方教程Tutorial: Use the Video Indexer API 和Upload Video API 参考(API 参考页末尾的Python 示例代码,如下图)上传您的大视频。
由于下面的代码发送从内存读取的数据块{body},它的内存消耗很大,其值来自代码open("<your local file name>").read()。
conn.request("POST", "/{location}/Accounts/{accountId}/Videos?name={name}&accessToken={accessToken}&%s" % params, "{body}", headers)
但是,如果您仔细阅读文档Upload and index your videos 的videoUrl 小节和以下C# 代码,甚至API 参考中对videoUrl 的解释,您会看到视频文件作为multipart/form 正文传递内容不是唯一的方法。
videoUrl
要编入索引的视频/音频文件的 URL。 URL 必须指向媒体文件(不支持 HTML 页面)。该文件可以通过作为 URI 的一部分提供的访问令牌来保护,并且为该文件提供服务的端点必须使用 TLS 1.2 或更高版本进行保护。 URL 需要编码。
如果未指定 videoUrl,视频索引器希望您将文件作为多部分/表单正文内容传递。
带有videoUrl的C#代码截图
API 参考中videoUrl 参数的截图
您可以先通过Python streaming upload code或azcopy或Azure Storage Explorer等其他工具将大型视频文件上传到Azure Blob Storage或其他满足videoUrl要求的在线服务,然后以Azure Blob Storage为例生成带有 sas 令牌的 blob url(Python 代码如下)将其作为 videoUrl 传递给 API 请求以进行上传。
使用 sas 令牌生成 blob url 的 Python 代码
from azure.storage.blob.baseblobservice import BaseBlobService
from azure.storage.blob import BlockBlobService, BlobPermissions
from datetime import datetime, timedelta
account_name = '<your account name>'
account_key = '<your account key>'
container_name = '<your container name>'
blob_name = '<your blob name>'
service = BaseBlobService(account_name=account_name, account_key=account_key)
token = service.generate_blob_shared_access_signature(container_name, blob_name, BlobPermissions.READ, datetime.utcnow() + timedelta(hours=1),)
blobUrlWithSas = f"https://{account_name}.blob.core.windows.net/{container_name}/{blob_name}?{token}"
希望对你有帮助。