1

我正在尝试通过 Video Indexer API 上传一个大视频(大约 1.5 GB)。但是,我的机器为此占用了大量 RAM。部署系统具有相当少量的 RAM。我想使用 API 以便在不占用太多内存的情况下分多个部分上传视频(大约 100MB 就足够了)。

我尝试使用 ffmpeg 将视频分成块并逐块上传,但 Video Indexer 将它们识别为不同的视频并为每个视频提供单独的见解。如果视频是在线聚合的,那就更好了。

如何将分块视频上传到 MS Video Indexer?

4

1 回答 1

3

让我猜。之前,您按照官方教程Tutorial: Use the Video Indexer APIUpload VideoAPI参考(API参考页面末尾的Python示例代码如下图)上传您的大视频。

在此处输入图像描述

它消耗大量内存,因为下面的代码发送{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# 代码,即使是videoUrlAPI 参考中的说明,您也会发现作为multipart/form正文内容传递的视频文件并不是唯一的方法。

视频网址

要索引的视频/音频文件的 URL。URL 必须指向媒体文件(不支持 HTML 页面)。该文件可以通过作为 URI 的一部分提供的访问令牌来保护,并且为该文件提供服务的端点必须使用 TLS 1.2 或更高版本进行保护。URL 需要编码。

如果未指定 videoUrl,则视频索引器希望您将文件作为多部分/表单正文内容传递。

C# 代码的屏幕截图videoUrl

在此处输入图像描述

videoUrlAPI参考中的参数截图

在此处输入图像描述

videoUrl您可以先通过Python 流式上传代码azcopy或其他工具(如Azure Storage Explorer )将大型视频文件上传到 Azure Blob Storage 或其他满足要求的在线服务,然后以 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}"

希望能帮助到你。

于 2019-06-14T08:28:04.527 回答