Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кратко об истории и характеристиках формата MPEG4 / 2008-05-19-23-53-Кирилл- об истории и характеристиках стандартов MPEG (документация, исходники, скачать).doc
Скачиваний:
38
Добавлен:
01.05.2014
Размер:
265.73 Кб
Скачать

3.6.3.Abr

  Пояснение:Можно было бы сказать, что резервуар неплохо справляется со своей основной обязанностью - накопление "лишних" битов во время простых пассажей и их выдача в качестве дополнительных при кодировании сложных пассажей, если бы не одно "но": он обладает конечным и, причём, весьма ограниченным размером, что означает, что копить его можно лишь до определенных пределов, и вынимать, соответственно, тоже, пока резервуар не опустошится. Именно для того чтобы убрать этот главный недостаток резервуара и был разработан ABR.

  Главное отличие ABR от CBR в том, что в CBR все фреймы обязаны быть одного размера (то есть битрейт для всех фреймов должен быть одинаков), в ABR же это ограничение снято, соответственно, существует возможность вместо стандартного весьма ограниченного по размеру резервуара использовать практически бесконечный "виртуальный" резервуар. Выглядит это приблизительно следующим образом.

  Механизм:Допустим, что пользователь указал режим ABR и определенный битрейт B (пользователь может указывать абсолютно любой битрейт от 32 до 320, даже не из стандартной сетки битрейтов, например можно указать в качестве желаемого среднего битрейта 129). Кодер принимает кусок аудио (фрейм), который необходимо закодировать. Таким же образом, как и в CBR, определяет его сложность (об этом мы поговорим ниже). Если пассаж сложный, то кодер также берёт на него больше битов, но уже не из резервуара (как в CBR), а просто-напросто увеличивая битрейт на необходимое количество ступеней (выбранный битрейт должен входить в сетку стандартных), создавая таким образом "виртуальный резервуар" (поднять битрейт здесь можно - это не CBR). Что значит "виртуальный резервуар"? Это просто: мы предположили, что указанного пользователем битрейта B кодеру мало, ему нужно K бит (K > B), тогда кодер подбирает такой минимальныйстандартныйбитрейт N, при котором выполняется: N >= K (такой выбор битрейта мы и называем "виртуальный резервуар"). Затем происходит кодирование с помощью K бит взятого куска аудио. Однако N >= K, то есть мы использовали меньше бит, чем есть во взятом фрейме, так не будем же мы выбрасывать эти лишние биты? Вот эти лишние биты мы и записываем в уже настоящий резервуар. Так как в ABR есть возможность использовать "виртуальный резервуар" не имеет смысла строить стандартный резервуар, поэтому когда придет следующий кусок аудио, для его кодирования сначала будут использованы биты из резервуара, а потом кодер решит какой битрейт необходим дальше. Другими словами, если в CBR кодер все время старается накопить как можно больше бит в резервуаре, то в ABR кодер наоборот, старается избавиться от бит в резервуаре, так как копить их незачем - можно просто поднять битрейт.

  Простые пассажи кодируются меньшим количеством бит, на них берётся примерно 95% от указанного битрейта B, но теперь остаток не откладывается в резервуар, кодер просто берёт фрейм с меньшим битрейтом. Возникающая разница (оставшиеся биты) записывается в стандартный резервуар (не выбрасывать же оставшиеся биты...). Пример. Допустим, пришел "простой" пассаж. Тогда кодер берет все биты (если таковые есть) в резервуаре (настоящем), потом ищет ближайший стандартный битрейт, при котором суммарное количество бит, получившееся для этого фрейма (все биты из резервуара + взятый битрейт), составит 95% от заданного пользователем битрейта B, производит кодирование, а лишние биты (если они остались) снова сохраняет в резервуаре.

Итог:Таким образом, использование резервуара в ABR отлично от CBR. В CBR битрейт менять нельзя и резервуар специально копят путем сохранения там бит, которые остались (были сэкономлены) от кодирования фрейма на заданном изначально фиксированном битрейте во время простого пассажа; если для кодирования нужны биты и резервуар пуст - то пуст, ничего с этим поделать нельзя и кодирование идет просто на указанном битрейте в ущерб качеству. В ABR битрейт переменный и стандартный резервуар фактически не нужен, однако поскольку поднятие (опускание) битрейта происходит обязательно до определенноготабличногозначения, которое может оказаться выше необходимого кодеру количества бит, то лишние биты, конечно, не выбрасывают, а сохраняют в резервуаре. Иными словами, в CBR накопление стандартного резервуара - основная задача, в ABR же есть неограниченный "виртуальный резервуар" и стандартный используется только для хранения лишних бит, образовавшихся в результате разницы между табличными значениями битрейтов и реально необходимым битрейтом.