2

我正在尝试创建一个使用 Windows Media Services REST API 上传视频文件并对其进行转码的应用程序。一切正常,但我遇到了一种情况,我无法上传 160 MB 的视频文件而不知道为什么。以常规方式调试上传过程非常痛苦,因为上传 160 MB 文件需要很长时间,所以我决定在这里问我的问题:

  1. 我知道单个文件大小(最大为 64 MB)的 Azure 存储限制。将文件上传到 Windows Media Services 是否也有这样的限制?我需要以 4 MB 的块发送该文件吗?

  2. 如果是这样,实际上如何使用 REST API 做到这一点?我可以将分块文件发送到常规存储帐户,但是对于 WMS,情况有所不同。基本上,在处理 WMS 时,我需要将我的文件(或文件块)上传到特定的临时 url,我不确定如何将它与块结合并设置块 id 等。我也找不到任何信息关于互联网上的那个。

提前感谢您的任何建议!

4

1 回答 1

4

你没有说你使用哪个平台来构建你的应用程序(我猜是.net?)

  1. 根据MSDN,单个文件(blob)不限于 64 MB:

    每个块可以有不同的大小,最大为 4 MB。块 blob 的最大大小为 200 GB,一个块 blob 最多可以包含 50,000 个块。如果您正在编写大小不超过 64 MB 的块 blob,则可以通过一次写入操作将其全部上传。

    这意味着您可以上传最大为 200 GB 的文件(blob)。如果文件小于 64 MB,您可以将其作为一大块(块)上传。如果它大于 64 MB,则必须将其拆分为较小的块(每个块最多 4 MB)并以这种方式上传。

  2. 完全披露:我写了这篇博文,解释了如何构建一个可以分块上传文件的异步上传页面。它使用 Azure REST API 上传所有文件块,并使用Windows Azure 媒体服务 SDK与媒体服务通信并创建用于上传文件的定位器(您提到的临时 URL)。

    完成这项工作涉及相当多的代码,所以我创建了一个简单的演示应用程序(用 JS 和 .net 编写)来配合这篇文章。如果您不在 .net 中执行此操作,您仍然可以使用代码的 JS 部分,只是您还需要通过 Azure REST API 获取上传定位器。

非常简化,上传/转码工作流程如下所示:

  • 通过应用程序的后端获取临时上传 URL(定位器)(以保护您的 Azure 凭据)
  • 将文件拆分成更小的块,通过 REST API 代表 WAMS(Windows Azure 媒体服务)将它们全部上传到 Azure 存储,同时跟踪所有块 ID
  • 向 REST API 提交包含所有块 ID 的 XML
  • 如果需要,对视频进行转码(我在应用程序后端使用 WAMS SDK 来创建编码作业)——每个视频都将是一个新的独立资产
  • 发布资产 - 获取用于访问原始和/或转码视频的定位器 (URL)

我还建议您阅读Gaurav Mantri关于将大文件上传到 Azure 存储的文章。它解释了很多,并且是关于这个主题的很好的读物。

于 2014-03-19T22:42:47.967 回答