При просмотре видеофайла и его последующей перемотки или, скажем, при переключении с одного онлайн видеопотока в плеере на другой, можно заметить что в одних случаях воспроизведение начинается сразу, а в других по прошествие некоторого времени. Возникает вопрос - почему? Оказывается, нюанс заключается в так называемых ключевых кадрах или их еще называют кадры I-типа. Дело в том что, видеопоток состоит из кадров-статичных изображений быстро сменяющих друг друга, другими словами при просмотре мы видим пошаговую анимацию. Так вот, для экономии места и следовательно, для уменьшения битрейта обычно делаю так: записывают полный кадр (ключевой), а в последующих кадрах записывается информация об изменяющихся областях в сравнении с предыдущим кадром. Логично, что так долго продолжаться не может т.к. количество изменений увеличивается или вовсе требуется внести новые элементы, тогда кодер вставляет очередной ключевой кадр и процесс повторяется. При недостаточной частоте опорных кадров изображение может начать "сыпаться" или застывать.
Получается, что воспроизведение видеопотока не начнется до тех пор, пока декодер не получит ключевой кадр, с этим и связана пауза в начале просмотра.
Для анализа последовательности кадров в видеопотоке, можно воспользоваться Linux утилитой ffprobe:
ffprobe -i путь_до_видеопотока_или_файла -select_streams v -show_frames -show_entries frame=pict_type -of csv
На выходе в реальном времени можно наблюдать сменяющуюся последовательность кадров с указанием его типа:
frame,I
frame,B
frame,B
frame,P
frame,B
frame,B
Обычно ключевые кадры вставляют раз в секунду или, другими словами, через каждые 23 кадра. Но некоторые "деятели" для снижения битрейта и в конечном счете для экономии трафика, увеличивают интервал вставки ключевых кадров - в итоге приводящий к проблемам описанных выше.
О других типах кадров можно почитать на википедии...
Комментарий: