Вычислить суффикс файла сегмента .m4s в потоковой передаче HTML5, когда пользователь ищет другое время

Я создал сегменты фиксированной длины для длинного видео MP4 с использованием Mp4Box. Mp4Box создает мета-info файл mv_init.mp4 и сегменты, такие как mv_1.m4s, mv_2.m4s,... Я передаю видео с помощью HTML5 Media Source Extensions, и потоковая передача работает правильно.

Проблема в том, что Я не могу использовать функцию поиска времени для своего проигрывателя HTML5. Когда пользователь использует поисковую панель для поиска другой точки времени, мне нужно получить правильный файл сегмента (mv_{number}.m4s) для этого currentTime.

Например:

  • продолжительность видео: 2 часа
  • размер сегмента: 10 секунд
  • пользователь ищет время: 25 минут

25 минут = 25 × 60 секунд = 1500 секунд. Поскольку каждый сегмент имеет 10 секунд, мне нужен номер сегмента 1500/10 = 150. Необходимый файл сегмента mv_150.m4s.

Вычисление, по-видимому, кажется правильным, но проигрыватель HTML5, а затем загружает еще много файлов после mv_150.m4s, прежде чем он продолжит поток.

Как правильно рассчитать номер файла сегмента, чтобы после поиска потоковая передача выполнялась гладко, без загрузки каких-либо дополнительных файлов?

Чтобы создать сегменты видео MP4, я использовал следующую команду:

MP4Box -dash 10000 -out video.mpd -dash-profile live -segment-name mv_ -rap video.mp4

Ответ 1

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

Ключевые кадры в видеофайле можно настроить с помощью FFMPEG. Так, например, если у нас есть видео с сегментами 5 секунд, мы должны создать ключевой кадр с интервалом 5 секунд, используя ffmpeg. Еще одним важным моментом при создании ключевых кадров является просмотр FRAME RATE видео. Видео должно иметь фиксированную частоту кадров, чтобы мы могли точно рассчитать положение ключевого кадра.

Пример:

Video File: gladiator.mp4

Segment Size: 5 seconds

Нет, мы устанавливаем FRAME RATE и KEY FRAME INTERVAL с использованием FFMPEG

ffmpeg -i gladiator.mp4 -x264-params keyint = 120: min-keyint = 120: no-scenecut = 1 -r 24 gladiator-output.mp4

keyint=120 i.e; 24 fps * 5 seconds = 120

И теперь мы создаем сегментные файлы, используя Mp4Box

MP4Box -dash 5000 -frag 5000 -out gladiator.mpd -dash-profile on-demand -segment-name mv_ gladiator-output.mp4

Таким образом, он будет создавать сегменты, такие как mv_1, mv_2,.. и так далее, имея ключевые кадры в начале каждого файла сегмента.

Пример поиска подходящей тире