Как обнаружить и исправить ошибки в модулях x264 NAL?

Предположим, я получаю пакеты, содержащие блоки NAL в кодировке H264, и каждый NAL имеет правильный START_CODE (0x00 00 00 01).

Но в некоторых NALU более поздние байты NAL могут быть повреждены. Существует ли какой-либо стандартный способ проверки правильности информации, представленной NALU?

И если это можно проверить, есть ли какой-либо стандартный способ исправить это в соответствии со стандартами H264?

Дальнейшее уточнение:

Проблема, которую нужно указать, выглядит примерно так ->

Сервер отправляет x264 NALU, например 0x 00000001abcdefgh, и когда я получаю пакет, он содержит: 0x 00000001abcmnopdefgh.

Это приводит к сбою декомпрессии, поэтому я искал способ устранить эти неверные байты данных.


person FahimAhmed    schedule 09.01.2020    source источник
comment
Я не понимаю эту концепцию, но: устойчивость к ошибкам и маскировка в H.264 могут ответить на ваш вопрос...   -  person mofo77    schedule 10.01.2020
comment
Проблема, которую нужно указать, примерно такая: Сервер отправляет x264 NALU, например 0x 00000001abcdefgh, и когда я получаю пакет, он содержит: 0x 00000001abcmnopdefgh. Это приводит к сбою декомпрессии, поэтому я искал способ устранить эти неверные байты данных.   -  person FahimAhmed    schedule 10.01.2020
comment
Вы не можете удалить его. Вы должны предотвратить это. Не существует настоящего протокола, который делает это без включения счетчиков непрерывности. Если вы используете необработанный UDP, без FEC или CC, решения буквально нет.   -  person szatmary    schedule 10.01.2020


Ответы (1)


Единственный способ проверить это - проанализировать весь nal и убедиться, что у вас есть правильное количество битов. Даже в этом случае некоторые ошибки могут быть не обнаружены.

Нет, исправить ошибки невозможно, если только контейнер/файл не содержит коды стирания.

person szatmary    schedule 09.01.2020
comment
Не могли бы вы сказать мне, какие байты NAL описывают количество битов, которое он должен содержать? - person FahimAhmed; 09.01.2020
comment
Такого нет. Это добавит ненужный размер сжатому файлу. Единственный способ узнать размер — распаковать весь NAL. Вам нужно прочитать ISO-14496-10, но будьте осторожны, это около 1000 страниц. - person szatmary; 09.01.2020
comment
На самом деле проблема, с которой я столкнулся, заключается в том, что я получаю пакеты в кодировке h264 по сети. Теперь, иногда NALU, которые я получаю, содержат мусорные байты между ними, и когда я отправляю их в Apple VTDecompressionSession, он не может распаковать их, выдавая ошибку 12909. Поэтому я подумал, могу ли я найти какой-нибудь способ проверить и удалить мусорные биты из NALU, а затем отправить их в сеанс декомпрессии. - person FahimAhmed; 10.01.2020
comment
"Мусорные биты"? Новые биты не появляются просто так. Что-то производит их по какой-то причине. Предлагаю разобраться, что такое вставка «мусорных битов» и для каких целей. Затем выяснить, как их удалить, поняв, как они были вставлены в первую очередь. - person szatmary; 10.01.2020
comment
На самом деле мусорные биты оказываются битами из некоторых более ранних пакетов, которые были потеряны и не получены. - person FahimAhmed; 10.01.2020
comment
Иногда бывают потери начальных пакетов. Где 2 или 3 пакета не доходят до принимающей стороны от сервера. И позже некоторые фрагменты этих потерянных пакетов появляются среди других NALU как мусор. - person FahimAhmed; 10.01.2020
comment
Это значительно отклонилось от вашего первоначального вопроса. Если у вас есть еще вопросы, откройте другой пост. Пожалуйста, будьте как можно более подробными и укажите ВСЮ имеющуюся у вас информацию в вопросе. Трудно помочь, когда мне приходится извлекать небольшие кусочки проблемы из комментариев. - person szatmary; 10.01.2020
comment
Извините за отклонение, но причина, по которой я не раскрыл информацию о пакетах, заключается в том, что даже после этих мусорных битов mp4box, похоже, может генерировать действительный файл mp4 поверх полученного дампа h264, который можно воспроизводить с помощью медиаплееров. Поэтому я подумал, что есть какой-то механизм обнаружения и исправления ошибок, о котором я не знал, поэтому я задал этот вопрос. - person FahimAhmed; 10.01.2020