Отправка блобов на URL загрузки служб Windows Media

Я пытаюсь создать приложение, которое использует API REST Windows Media Services для загрузки видеофайлов и их перекодирования. Все отлично работает, но я столкнулся с ситуацией, когда я не могу загрузить видеофайл размером 160 МБ, не зная, почему. Регулярная отладка процесса загрузки крайне затруднительна, так как загрузка файла размером 160 МБ занимает много времени, поэтому я решил задать свой вопрос здесь:

  1. Я знаю об ограничениях хранилища Azure для одного размера файла (до 64 МБ). Есть ли такое ограничение для загрузки файлов в Windows Media Services? Нужно ли отправлять этот файл в 4 МБ?

  2. Если да, то как на самом деле это можно сделать с помощью REST API? Я могу отправить кусковой файл на обычную учетную запись хранения, но когда дело доходит до WMS, все немного по-другому. По сути, при работе с WMS мне нужно загрузить свой файл (или файловые блоки) на определенный временный URL, и я не уверен, как объединить это с чанками, установить идентификатор блока и т. Д. Я также не могу найти какую-либо информацию об этом в интернете.

Спасибо заранее за любые советы!

1 ответ

Решение

Вы не сказали, какую платформу вы используете для создания своего приложения (полагаю, это.net?)

  1. Согласно MSDN, один файл (блоб) не ограничен 64 МБ:

    Каждый блок может быть разного размера, не более 4 МБ. Максимальный размер блочного блоба составляет 200 ГБ, а блочный блоб может содержать не более 50000 блоков. Если вы пишете блочный блоб размером не более 64 МБ, вы можете загрузить его полностью с помощью одной операции записи.

    Это означает, что вы можете загружать файлы (BLOB-объекты) размером до 200 ГБ. Если размер файла меньше 64 МБ, вы можете загрузить его как один большой блок (блок). Если его размер превышает 64 МБ, вам придется разбить его на более мелкие блоки (до 4 МБ каждый) и загрузить его таким образом.

  2. Полное раскрытие: я написал этот пост в блоге, который объясняет, как создать асинхронную страницу загрузки, которая может загружать файлы кусками. Он использует API-интерфейс REST Azure для загрузки всех файловых блоков и SDK Windows Azure Media Services для связи со службой мультимедиа и создания локаторов (упомянутых вами временных URL-адресов), которые используются для загрузки файлов.

    Для создания этой работы требуется довольно много кода, поэтому я создал простое демонстрационное приложение (написанное на JS и.net), которое будет сопровождать этот пост. Если вы не делаете этого в.net, вы все равно сможете использовать часть кода JS, просто вам нужно будет также получить локаторы загрузки через API-интерфейс REST Azure.

Очень упрощенный рабочий процесс загрузки / транскодирования выглядит примерно так:

  • Получите временный URL-адрес для загрузки (локатор) через серверную часть приложения (чтобы защитить свои учетные данные Azure)
  • Разделите файл на более мелкие куски, загрузите их все в хранилище Azure от имени WAMS (Windows Azure Media Services) через API REST, отслеживая все идентификаторы блоков
  • Отправить XML, содержащий все идентификаторы блоков в REST API
  • При необходимости перекодируйте видео (я использовал WAMS SDK в серверной части приложения для создания заданий по кодированию) - каждое видео будет новым отдельным активом
  • Публикация ресурсов - получение локаторов (URL) для доступа к оригинальным и / или транскодированным видео

Я также рекомендую прочитать статью Гаурава Мантри о загрузке больших файлов в хранилище Azure. Это многое объясняет и очень хорошее прочтение на эту тему.

Другие вопросы по тегам