Подтвердить что ты не робот

H.264 кодированное разделение NAL/среза

Я работаю над приложением, которое должно передавать H.264-кодированное видео в режиме реального времени через UDP (своего рода видеозвонок).

Недавно мы переключились на аппаратный кодер, который поддерживает только ограниченное число профилей H.264. В результате каждый кодированный видеокадр теперь состоит из одного NALu. Точнее, для кадров IDR (key) кодер производит SSP, PSP и единый срез IDR, для других - единый фрагмент без IDR.

Теперь моя цель состоит в том, чтобы разделить срез NALu на несколько более мелких, потому что в случае потери пакета, если NALu невозможно собрать полностью - он полностью потерян. Как минимум, мне нужно разбивать срез пространственно, т.е. Помещать диапазоны макроблоков в разные NALus. Если возможно - я также хотел бы извлечь качественные слои, чтобы базовый уровень мог быть защищен более избыточными пакетами (FEC).

Примечание. Я не говорю о перекодировке. Это о переупаковке/переформатировании, поиске блоков данных определения макроблоков и их другом.

Теперь я пытаюсь проанализировать соответствующие заголовки данных: SPS, PPS и кодированные фрагменты, используя как стандартные спецификации H.264, так и некоторый код декодеров с открытым кодом. Задача кажется возможной, хотя и довольно сложной, с большим количеством технических деталей.

Мой вопрос: это известная проблема? Есть ли API/библиотека, которая делает именно это?

4b9b3361

Ответ 1

Вопрос: является ли это известной проблемой? Есть ли какой-нибудь API/библиотека, который делает именно это? "

Нет библиотеки API, о которой я знаю, но я считаю, что вы можете найти свое решение или приблизиться к вашему решению здесь, в исходном коде, который может быть скомпилирован в библиотеку из проекта h264bitstream в github: https://github.com/aizvorski/h264bitstream/blob/master/svc_split.c Сообщите нам, как это сработало для вас. Естественно, вам нужно прочитать здесь код, но основное решение, или близкое к решению, похоже, есть.