Загрузка большого файла в Video Indexer через python - PullRequest
0 голосов
/ 12 июня 2019

Я пытаюсь загрузить большое видео (около 1,5 ГБ) через Video Indexer API.Моя машина, однако, требует много оперативной памяти для этого.Система развертывания имеет довольно небольшой объем оперативной памяти.Я хочу использовать API, чтобы видео загружалось несколькими частями, не занимая слишком много памяти (достаточно около 100 МБ).

Я пытался использовать ffmpeg, чтобы разделить видео на куски и загрузить его.по частям, но Video Indexer распознает их как разные видео и дает отдельную информацию для каждого.Было бы лучше, если бы видео агрегировалось онлайн.

Как я могу сделать загрузку фрагментированного видео в MS Video Indexer?

1 Ответ

0 голосов
/ 14 июня 2019

Дай мне угадать.Ранее вы следовали официальному учебнику Tutorial: Use the Video Indexer API и справке API Upload Video (пример кода Python в конце справочной страницы API, как показано на рисунке ниже), чтобы загрузить свой большойвидео.

enter image description here

Это стоит много памяти, потому что приведенный ниже код отправляет блок данных {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

enter image description here

Снимок экрана для параметра videoUrl в справочнике API

enter image description here

Сначала вы можете загрузить большой видеофайл в хранилище 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}"

Надеюсь, это поможет.

...