Дай мне угадать.Ранее вы следовали официальному учебнику Tutorial: Use the Video Indexer API
и справке API Upload Video
(пример кода Python в конце справочной страницы API, как показано на рисунке ниже), чтобы загрузить свой большойвидео.
Это стоит много памяти, потому что приведенный ниже код отправляет блок данных {body}
, считываемый из памяти, и его значение берется изкод open("<your local file name>").read()
.
conn.request("POST", "/{location}/Accounts/{accountId}/Videos?name={name}&accessToken={accessToken}&%s" % params, "{body}", headers)
Однако, если вы прочитаете подраздел videoUrl
документа Upload and index your videos
иВнимательно следуя коду C #, даже объясняя videoUrl
в справочнике по API, вы увидите, что видеофайл передается как multipart/form
содержание тела не единственным способом.
videoUrl
URL-адрес видео / аудио файла для индексации.URL-адрес должен указывать на медиа-файл (HTML-страницы не поддерживаются).Файл может быть защищен токеном доступа, предоставленным как часть URI, и конечная точка, обслуживающая файл, должна быть защищена с помощью TLS 1.2 или выше.URL-адрес должен быть закодирован.
Если videoUrl не указан, Video Indexer ожидает, что вы передадите файл в виде содержимого тела, состоящего из нескольких частей / формы.
Снимок экрана дляКод C # с videoUrl
Снимок экрана для параметра videoUrl
в справочнике API
Сначала вы можете загрузить большой видеофайл в хранилище BLOB-объектов Azure или другие онлайн-службы, удовлетворяющие требованию videoUrl
, через Код потоковой передачи Python или другие инструменты, например azcopy
или Azure Storage Explorer , затем с помощью хранилища BLOB-объектов Azure в качестве примера создайте URL-адрес блоба с токеном sas (код Python, как показано ниже), чтобы передать его как videoUrl
в запрос API для загрузки.
Python-код для генерации URL-адреса BLOB-объекта с токеном sas
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}"
Надеюсь, это поможет.