Представление потери пакетов / срезов в битовом потоке hevc
Я изучаю HEVC и очень плохо знаком с компрессией видео. Первое, что я хочу сделать, это увидеть влияние потери пакетов на декодированное видео. Я хочу изменить декодер, чтобы я мог вносить потери пакетов в битовый поток HEVC. Я буду использовать шаблоны ошибок, сгенерированные NS2. На какой части декодера я должен сосредоточиться? Как я могу вставить шаблоны ошибок в битовый поток HEVC? Какие конкретные переменные определяют кадр и номер среза? Я использую HM 16.6. Спасибо
2 ответа
Однажды я разработал инструмент Python, который взламывает битовый поток и переворачивает биты. Что я сделал, так это то, что я прочитал файл битового потока, сгенерированный кодером линейно, и рандомизировал процесс переключения битов. Поскольку я знаю структуру блоков NAL, из стандартных спецификаций я могу сказать, где находится мой поврежденный бит. Лучшая часть для начала манипулирования - это заголовки блока NAL. Видео, последовательность, фрагменты заголовков. Вы можете сказать, где они основаны на параметрах процесса пакетирования. Это было давно, поэтому я забыл детали. Заголовки не все говорят о битовом потоке, особенно о кадре, номере среза. Это может быть на основе вшей или плиток, или я забыл, что еще. Но это вы можете сказать из заголовков. Теперь декодер будет знать кадр, номер слайса при его декодировании и следовать указаниям кодера. То, что вам нужно знать, будет в заголовках. Проверьте последний рабочий проект и изучите информацию заголовка.
Я публикую это как ответ, а не как комментарий, так как у меня нет репутации, чтобы комментировать. В HEVC срез представляет собой группу последовательных CTU (единиц дерева кодирования) в кадре. Кроме того, HEVC вводит разбиение срезов на так называемые сегменты срезов, в основном для приборов с малой задержкой. Когда срез разделяется на несколько сегментов среза, только первый сегмент среза содержит информацию заголовка, необходимую для декодирования всего среза. Оставшиеся зависимые сегменты слайса относятся к начальному сегменту слайса во время декодирования. Каждый сегмент слайса (или сегмент, если сегментация не используется) отображается на один блок данных, называемый "блок NAL (уровня сетевой абстракции)". Единицей NAL является полезная нагрузка видеопакета в физическом канале, и поэтому потеря пакета во время передачи соответствует потере единицы NAL и, следовательно, потере среза. Если вы изучите стандарт HEVC, вы столкнетесь с блоком данных другого типа, который называется блоком доступа. Единица доступа - это совокупность блоков NAL (следовательно, совокупность слайсов). Во время передачи разделители размещаются между блоками NAL, а также между блоками доступа, чтобы отдельно идентифицировать каждый тип. В HEVC-кодированном потоке разделитель единиц доступа определен как x00 00 00 01, тогда как разделитель NAL определен как x00 00 01. Таким образом, в основном, если вы хотите ввести потерю пакетов в данном кадре, сначала вам нужно определить правильный кадр путем подсчета разделителей блока доступа в битовом потоке. Позже удалите все биты между желаемыми разделителями NAL.