I-Frame Delay (IFD) — это метод планирования адаптивной потоковой передачи видео MPEG . Идея заключается в том, что планировщик потоковой передачи отбрасывает видеокадры, когда буфер передачи заполнен из-за недостаточной пропускной способности, чтобы снизить скорость передачи данных. Характеристики алгоритма.: [1]
Механизм IFD разделен на две части: [1]
Размер буфера IFD должен быть достаточно большим, чтобы вместить несколько кадров, но минимум требуется два кадра: один для хранения кадра, отправляемого в данный момент (обозначен ниже как ScheduledFrame), и один, ожидающий отправки в данный момент (обозначенный как WaitingFrame). . Увеличение размера буфера IFD потенциально может позволить более тщательно расставить приоритеты, однако это может привести к увеличению задержки и использования памяти. [1] На рисунке ниже показан пример заполнения буфера. Числа обозначают приоритет пакета.
Здесь номера приоритета видеокадров составляют 10 и выше. Пакеты с номером приоритета 12 относятся к кадру, запланированному к отправке, а пакеты с номером 11 относятся к кадру ожидания. На рисунке пакет, принадлежащий следующему кадру, вот-вот попадет в буфер.
Как можно видеть, можно чередовать видеопакеты с невидеопакетами (аудио или системные с номерами приоритета 2 и 0 соответственно). Когда пакет, принадлежащий следующему кадру, должен быть записан в буфер IFD и буфер заполнен, планировщик IFD отбросит кадр на основе ранее назначенного приоритета. Когда пропускная способность сети настолько мала, что необходимо отбросить и P-кадры, тогда GOP ( группа изображений ) устанавливается как «нарушенная», а остальная часть GOP (которая зависит от P-кадра) также отбрасывается. .
Если отбрасываются только B-кадры, то в изображении кадра не должно быть никаких искажений, поскольку от них не зависят последующие кадры. [1] Пропуск кадров по IFD приводит к эффекту временной остановки воспроизведения видео, продолжительность которой зависит от количества пропущенных кадров, после чего воспроизведение возобновляется со следующего прошедшего кадра. [1] Для реализации IFD с буфером размером в два кадра алгоритм показан на рисунке ниже.
процедура Enqueue(NextFrame) если DisturbedGOP == True, тогда если NextFrame имеет тип I, то # обнаружена новая GOP DisturbedGOP = False # Сброс флага нарушенной GOP конец конец если DisturbedGOP == True, тогда Drop NextFrame # Отбросить остальную часть нарушенной GOP возвращаться конец если WaitingFrame пуст, то Ожидающий кадр = Следующий кадр еще если NextFrame имеет тип I, то Ожидающий кадр = Следующий кадр еще если NextFrame имеет тип B, то Отбросить следующий кадр еще если WaitingFrame имеет тип I или P, тогда Отбросить следующий кадр если NextFrame имеет тип P, то # Отброшенный кадр является P-кадром DisturbedGOP = True # Установить флаг нарушенной GOP конец еще Ожидающий кадр = Следующий кадр конец конец конец конецконец