Какие байты видеоданных относятся к текущей позиции воспроизведения

Я работаю с расширениями медиа-источников для воспроизведения видео в браузере.

Моя программа на JavaScript делит видеофайл на фрагменты по 1200 байт. Видео закодировано в следующем кодеке: video/mp4; codecs="avc1.42E01E, mp4a.40.2".
Указав время X в секундах, я хочу найти соответствующий первый фрагмент, необходимый для воспроизведения видео в позиции X (или фрагмент, который находится рядом, но не после эта позиция). Более конкретно, я хочу узнать, какой фрагмент принадлежит времени в свойстве currentTime HTMLMediaElement. Видеофайл можно предварительно проанализировать.


person user74088    schedule 11.02.2016    source источник
comment
Этот ответ работает нормально для вас? Можете ли вы перейти к кадрам, перечисленным в STTS, и получить четкое изображение на дисплее (без временных грязных пикселей)? Обычно вам нужно искать ключевой кадр, указанный в STSS, и играть оттуда...   -  person VC.One    schedule 15.02.2016


Ответы (1)


Существует множество способов указать отображение продолжительности->фрагмента в файле mp4.

  • Поле subsegment index (сокращенно sidx), определенное в ISO/IEC 14496-12, связывает диапазоны байтов из входного файла с соответствующими длительностями.

Вот фрагмент содержимого коробки sidx:

subsegment 0 size 726463 dur 450450
subsegment 1 size 723260 dur 450450
subsegment 2 size 713278 dur 450450
subsegment 3 size 441644 dur 450450
... and so on ...

Поиск фрагмента для заданного времени X тривиален.

  • большинство файлов mp4 не имеют поля sidx, а имеют поля stsz и stts, которые отображают серию семплов (видео или аудиокадров) в продолжительность + размер. Вот и пример:

коробка сцз:

sample 0 size 105222
sample 1 size 1554
sample 2 size 2153

коробка стс:

3 sample each with dur 512

Поле stts указывает продолжительность выборок, определенных в stsz.

  • могут быть другие способы. Этот список не является исчерпывающим
person Svetlin Mladenov    schedule 11.02.2016