Как мультиплексировать поток RTP в зависимости от типа блока NAL

Моя работа выглядит следующим образом:

  1. Перед потоковой передачей видео тип, размер и начальный адрес каждого блока NAL извлекаются с помощью синтаксического анализатора битового потока H.264.

  2. Во время потоковой передачи один блок NAL инкапсулируется в один пакет RTP.

Мой вопрос: мне нужно использовать извлеченную информацию о блоке NAL в качестве входных данных для мультиплексора, чтобы этот мультиплексор мог определить, содержит ли пакет RTP определенный тип блока NAL, такой как PPS. Если это так, он направит его в туннель TCP, иначе пакет RTP будет направлен в туннель UDP.

К вашему сведению: я использую OEFMON, который объединяет Qualnet и Directshow. Любая помощь будет оценена по достоинству.


person Eñg Nåwål SbǾǿl    schedule 25.05.2015    source источник
comment
Я не уверен, зачем вам нужно использовать TCP-канал для PPS. PPS — это абсолютно корректная единица измерения, и она должна быть частью вашего потока udp. Какая-то конкретная причина? В любом случае вы можете найти тип блока NAL в заголовке nal. 7 это sps, а 8 это pps.   -  person Saibal    schedule 26.05.2015
comment
@Saibal Спасибо за ваш ответ. Отправка PPS и SPS через TCP важна для гарантии доставки этих единиц, которые имеют большое влияние на качество видео. Мне нужно узнать тип блока NAL, проанализировав заголовок RTP, а не заголовок NAL. Какие-либо предложения?   -  person Eñg Nåwål SbǾǿl    schedule 27.05.2015


Ответы (1)


В заголовке rtp нет информации о типе NAL. Вы должны проанализировать полезную нагрузку RTP, чтобы получить окончательный тип. Следующий фрагмент кода показывает основы:

 nType = getbits(pRaw+12, 3, 5);

где pRaw — это начало всего пакета RTP, что делает pRaw + 12 началом полезной нагрузки RTP. Таким образом, функция по существу считывает значение, определяемое 5 битами, начинающимися со смещения 3 от начала данных полезной нагрузки RTP. Это определено в RFC 6184.

person Saibal    schedule 27.05.2015
comment
Спасибо за ваш ответ, я пройду через это. Я понимаю RFC 6184, но не могу найти фрагмент кода на С++, который его реализует. Я новичок в кодировании таких идей, поэтому любая помощь будет полезна. - person Eñg Nåwål SbǾǿl; 27.05.2015
comment
Можете ли вы помочь мне с получением pRaw? Еще один вопрос, пожалуйста: какое значение возвращает nType? Я новичок в этой области, поэтому я очень ценю вашу ценную помощь. - person Eñg Nåwål SbǾǿl; 29.05.2015