Как упаковать H.263 в пакеты RTP после того, как поток закодирован с помощью FFMPEG
У меня есть VoIP Softphone на основе Java (jPhoneLite), который поддерживает H.263+ и H.264. Но в настоящее время H.263 (RFC2190) является неполным. Согласно RFC, данные должны быть разделены на границах МБ (макроблок?), Но я не знаю, как их найти. Если вы посмотрите на источник FFMPEG /libavformat/rtpenc_h263_rfc2190.c в функции ff_rtp_send_h263_rfc2190(), то увидите, что информация о границе mb каким-то образом передается в их упаковщик из кодировщика. Я использую ffmpeg для кодирования моего видео в данные H263, но я не знаю, предоставляет ли ffmpeg функцию для получения этих указателей / смещений MB.
https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/rtpenc_h263_rfc2190.c
http://jphonelite.sourceforge.net/
Любая помощь? Благодарю.
2 ответа
Поток битов H.26x разделен на уровни, обычно каждый уровень начинается с уникальной последовательности битов.
- Слой изображения / кадра: начиная с PSC - начальный код изображения. включает в себя список GOV - группа блоков.
- GOV опционально начинается с кода. включает в себя список MB - макроблоков
- МБ - начинается с заголовка и заканчивается кодом.
Вы можете прочитать об этом в разделе: 3.2 GOB Нумерация rfc2190
После просмотра кода ffmpeg поиск начального кода выполняется с помощью: ff_h263_find_resync_marker_reverse () в rtpenc_h263.c.