Эффективный метод определения кодировки видео для загрузки в большой двоичный объект Azure в ASP .Net Core 2.

Наш SPA загружает видео с мобильного телефона. Более новые iPhone загружают видео в контейнер .Mov с помощью H.265 при некоторых обстоятельствах, которые Chrome не воспроизводит изначально.

Мы используем службы мультимедиа Azure для выполнения транскодирования. Возможные решения:

  1. Используйте функции Azure Media Services/Azure Blob. FetchAttributesAsync< /a> не содержит информации о кодеке. Ханвен не нашел другого применимого метода.
  2. Меня интересует только if == H.264 || if != H.265. Используйте знание .Mov Container и загружайте с помощью CloudBlockBlob.DownloadRangeToStream() или перехватывайте iFormFile Stream на загрузите и прочитайте определенные байты (FOURCC?), чтобы принять решение.

Хранение всего видео в памяти сервера не вариант.

Любое направление приветствуется.


person ttugates    schedule 12.03.2018    source источник
comment
Если вы используете наш сервис для перекодирования файлов MOV, мы поддерживаем как H.264, так и H.265 в качестве входных кодеков. Это решает вашу проблему? И вы можете увидеть docs.microsoft. com/en-us/azure/media-services/ для получения информации о том, как определить входные кодеки после завершения перекодирования, если это необходимо. Спасибо.   -  person Anil Murching    schedule 12.03.2018
comment
Я хочу перекодировать только те файлы, которые в этом нуждаются. Так что нужно будет только перекодировать H.265 в H.264. IOW, нужно знать перед транскодированием, какой это тип. Мой запасной вариант - доверять Клиенту, чтобы сообщить Серверу. Также не будет использоваться потоковое вещание.   -  person ttugates    schedule 12.03.2018
comment
Я думаю, вы говорите, что хотите проверить видеокодек либо перед загрузкой, либо на сервере, и из вашего описания это звучит так, как будто вы на самом деле транслируете видео, а не загружаете его? Затем вы перекодируете, если это необходимо, во время потоковой передачи, чтобы вы могли транслировать ее - правильно?   -  person Mick    schedule 13.03.2018
comment
@Mick - Потоковая передача может иметь несколько значений. Технически загрузка является потоком, я никогда не храню все видео в памяти, оно идет прямо в хранилище BLOB-объектов. Я не транслирую его при загрузке. После загрузки, если он не воспроизводится в Chrome, мне нужно в основном перекодировать его.   -  person ttugates    schedule 13.03.2018


Ответы (1)


Если цель состоит в том, чтобы решить, следует ли кодировать исходный MOV на основе видеокодека, вы можете реализовать следующее:

  1. Пользователь загружает файл MOV

  2. После завершения загрузки тема сетки событий в службе хранилища Azure запускает событие.

  3. Функция Azure — это обработчик событий/подписчик, получающий событие.

  4. Затем эта функция (а) определяет, что это новая загрузка видео, (б) создает URL-адрес SAS для видео, (в) запускает ffprobe для определения видеокодека, (г) если H.265, затем отправляет задачу кодирования

Примечание: если вы не хотите использовать ffprobe, вы можете отправить задачу миниатюры на исходное видео. Это будет недорогая работа, а выходной ресурс будет содержать XML-файл входных метаданных, который можно проанализировать для определения кодека. В моем комментарии выше я предоставил ссылку на схему для этого XML-файла.

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

person Anil Murching    schedule 13.03.2018
comment
@Anil Murching - я предполагал, что ffprobe загрузит весь BLOB-объект в память. Но информация о задаче Thumbnail — это именно то, что мне нужно. Проверим и отметим как ответ. Спасибо! - person ttugates; 13.03.2018