Как тег аудио / видео HTML5 определяет продолжительность - PullRequest
0 голосов
/ 24 декабря 2018

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

  1. Принять URL для mp3
  2. Определить длину (в секундах) файла, без загрузки всего файла

1 Ответ

0 голосов
/ 24 декабря 2018

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

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

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

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

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

...