Как тег аудио / видео HTML5 определяет продолжительность

Теги HTML5 <audio> и <video> поддерживают свойство duration. Мне любопытно, как без загрузки всего исходного файла аудио / видео браузер может определить продолжительность мультимедиа?

Я спрашиваю, потому что хотел бы реализовать ту же функциональность в бэкэнд-сервисе, который я пишу, который:

  1. Принять URL-адрес для mp3
  2. Определите длину (в секундах) файла без загрузки всего файла
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
1
0
37
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Большинство видеоконтейнеров содержат как визуальные, так и звуковые элементы, а также блок метаданных, который описывает такие вещи, как продолжительность, цветовое пространство, используемые кодеки и смещение для каждого кадра (полезно при поиске). В типичном видео, закодированном для Интернета как MP4, этот блок (он же атом MOOV) по умолчанию находится в конце файла (поскольку местоположение кадра не будет известно до конца), если не был выполнен второй проход для его перемещения в передняя например:

ffmpeg -i source.mp4 -c:a copy -c:v copy -movflags faststart destination.mp4

(копирует аудио и видео без изменений, просто перемещает метаданные в начало, чтобы обеспечить более быстрый доступ)

Возможно, вы видели какое-то веб-видео, где вы можете искать почти сразу с помощью MP4, а некоторые, где вы не можете точно искать, пока файл не будет полностью загружен ... это потому, что браузер должен делать `` догадки '', пока он не получит это метаданные

В частности, для mp3-файлов вы можете использовать что-то вроде это - чтобы запросить сервер, вы получите только данные ID3 Tag и eTag (последние 127 и 227 байтов) без необходимости загружать весь файл

Я мог видеть, что это работает для файла на диске, но как насчет того, что где-то на веб-сервере? Тег <audio>, похоже, может это сделать, если только он действительно не кэширует файл так быстро, что я этого не замечаю ...

ThaDon 24.12.2018 23:40

Если сервер, на котором размещен файл, поддерживает запросы диапазона байтов, вы можете запросить конкретный блок, который вам нужен. Поскольку местоположение тега mp3 известно, возможно, браузер уже делает это (сначала захватывает метаданные, а затем продолжает)

Offbeatmammal 24.12.2018 23:43

благодаря. Теперь мне интересно, должен ли мой интерфейс просто загружать тег <audio> в скрытый элемент только для того, чтобы извлечь продолжительность, чтобы затем я мог отправить его в запросе на бэкэнд ...

ThaDon 25.12.2018 00:10

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