Как упаковать 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 разделен на уровни, обычно каждый уровень начинается с уникальной последовательности битов.

  1. Слой изображения / кадра: начиная с PSC - начальный код изображения. включает в себя список GOV - группа блоков.
  2. GOV опционально начинается с кода. включает в себя список MB - макроблоков
  3. МБ - начинается с заголовка и заканчивается кодом.

Вы можете прочитать об этом в разделе: 3.2 GOB Нумерация rfc2190

После просмотра кода ffmpeg поиск начального кода выполняется с помощью: ff_h263_find_resync_marker_reverse () в rtpenc_h263.c.

Я предпочитаю Jitsi с открытым исходным кодом, написанный на Java.

Другим вариантом является Linphone, с открытым исходным кодом, а также с хорошим mediastramer2, который поддерживает h263/264 (msx264). Вы можете найти соответствующий код там

Другие вопросы по тегам