WikiDer > Задержка I-кадра
Эта статья нужны дополнительные цитаты для проверка. (Январь 2008 г.) (Узнайте, как и когда удалить этот шаблон сообщения) |
Задержка I-кадра (IFD) - это метод планирования для адаптивной потоковой передачи MPEG видео. Идея заключается в том, что планировщик потоковой передачи отбрасывает видеокадры, когда буфер передачи заполнен из-за недостаточной пропускной способности, чтобы уменьшить передаваемую скорость передачи битов. Характеристики алгоритма:[1]
- количество кадров, находящихся в данный момент в буфере (а не количество байтов), указывает на заполнение буфера,
- менее важные кадры (B-образная рама) из буфера удаляются перед более важными кадрами (I-рамка и П-образная рама),
- передача I-кадров задерживается при плохих условиях, даже если они устарели по сравнению с время отображения (их все еще можно использовать для декодирования последующих интерпрогнозируемых кадров).
Алгоритм задержки I-кадра
Механизм IFD разделен на две части:[1]
- по мере того, как поток анализируется и пакетируется в сетевые пакеты, он также анализируется, и пакеты маркируются номером приоритета, отражающим тип кадра (I-кадр, P-кадр или B-кадр). Пакеты, не относящиеся к видео, получают номер наивысшего приоритета, поэтому звук никогда не будет отброшен.
- во время передачи пакеты отбрасываются планировщиком IFD, когда пропускная способность недостаточна.
Размер буфера 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 end if DisturbedGOP == True then Drop NextFrame # Отменить остальную часть нарушенной GOP return end if WaitingFrame пусто, то WaitingFrame = NextFrame иначе, если NextFrame имеет тип I, то WaitingFrame = NextFrame иначе, если NextFrame имеет тип B, затем отбрасывает NextFrame, иначе, если WaitingFrame имеет тип I или P, то отбрасывает NextFrame, если NextFrame имеет тип P, то # Отброшенный кадр - это P-кадр DisturbedGOP = True # Установить флаг нарушенной группы изображений end else WaitingFrame = конец следующего кадра конец конец конец