1

I have a Java based VoIP Softphone (jPhoneLite) that supports H.263+ and H.264. But currently the H.263 (RFC2190) is incomplete. According to the RFC the data must be split up at MB (macroblock?) boundaries but I have no idea how to find them. If you look at FFMPEG source /libavformat/rtpenc_h263_rfc2190.c in function ff_rtp_send_h263_rfc2190() you can see that the mb boundary info is passed to their packetizer from the encoder somehow. I use ffmpeg to encode my video into H263 data but I don't know if ffmpeg provides a function to obtain these MB pointers/offsets.

https://github.com/FFmpeg/FFmpeg/blob/master/libavformat/rtpenc_h263_rfc2190.c

http://jphonelite.sourceforge.net

Any help? Thanks.

Peter Quiring
  • 1,648
  • 1
  • 16
  • 21

2 Answers2

1

The H.26x bit stream is divided in layers, generally each layer starts with unique sequence of bits.

  1. Picture/frame layer: starting with PSC - picture start code. includes list of GOV - group of blocks .
  2. GOV optionally starts with code. includes list of MB - macro blocks
  3. MB - start with header and ends with code.

You can read about it in section: 3.2 GOB Numbering of rfc2190

After reviewing ffmpeg code, the search for the start code is done by: ff_h263_find_resync_marker_reverse() in rtpenc_h263.c .

Community
  • 1
  • 1
joni
  • 34
  • 3
0

I prefer open source Jitsi written in Java.

Other option is Linphone, open source as well with good mediastramer2 that supports h263/264 (msx264). You can find relevant code there

Maxim Shoustin
  • 77,483
  • 27
  • 203
  • 225
  • I'm not looking for another softphone. I'm the creator of jPhoneLite and just wanted help trying to implement H.263 RFC2190 in my project. Thanks anyways. Although maybe I can look into their code... – Peter Quiring Sep 20 '13 at 14:24