如何在使用FFMPEG编码流之后将H.263打包成RTP数据包

时间:2013-09-18 23:12:10

标签: java ffmpeg rtp h.263

我有一个支持H.263 +和H.264的基于Java的VoIP Softphone(jPhoneLite)。 但目前H.263(RFC2190)尚不完整。 根据RFC,数据必须在MB(宏块?)边界分割,但我不知道如何找到它们。 如果你在函数ff_rtp_send_h263_rfc2190()中查看FFMPEG源/libavformat/rtpenc_h263_rfc2190.c,你可以看到mb边界信息以某种方式从编码器传递给它们的打包器。 我使用ffmpeg将我的视频编码为H263数据,但我不知道ffmpeg是否提供了获取这些MB指针/偏移量的函数。

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

http://jphonelite.sourceforge.net

有任何帮助吗?感谢。

2 个答案:

答案 0 :(得分:1)

H.26x比特流分层划分, 通常,每个层都以唯一的比特序列开始。

  1. 图片/帧层:从PSC开始 - 图片起始码。包括GOV列表 - 块组。
  2. GOV可选择以代码开头。包括MB - 宏块列表
  3. MB - 以标题开头,以代码结束。
  4. 您可以在以下部分阅读:{em> 3.2 GOB编号 rfc2190

    在查看ffmpeg代码后,搜索起始代码的方法是:rtpenc_h263.c中的 ff_h263_find_resync_marker_reverse()

答案 1 :(得分:0)

我更喜欢用Java编写的开源Jitsi

其他选项是Linphone,开源以及支持h263 / 264(msx264)的良好mediastramer2。你可以在那里找到相关代码