今天发现一个奇怪的问题,用上位机的linphone客户端拨打下位机的sip客户端能够正常工作,但是反过来就出问题了。 抓包发现linphone发送了大量的IP fragmentation 数据包,google才知道,当发现的数据大于MTU时就发产生IP分片的数据包。RTP打包时不是已经进行了分片操作了吗?正常情况应该不会出现这种情况才对。
linphone对h264进行RTP打包在rfc3984.c中进行,打包函数如下:
看来程序中定义了两种打包模式,看看两种模式有什么区别
linphone对h264进行RTP打包在rfc3984.c中进行,打包函数如下:
void rfc3984_pack(Rfc3984Context *ctx, MSQueue *naluq, MSQueue *rtpq, uint32_t ts){
switch(ctx->mode){
case 0:
rfc3984_pack_mode_0(ctx,naluq,rtpq,ts);
break;
case 1:
rfc3984_pack_mode_1(ctx,naluq,rtpq,ts);
break;
default:
ms_error("Bad or unsupported mode %i",ctx->mode);
}
}
看来程序中定义了两种打包模式,看看两种模式有什么区别
static void rfc3984_pack_mode_0(Rfc3984Context *ctx, MSQueue *naluq, MSQueue *rtpq, uint32_t ts){
mblk_t *m;
bool_t end;
int size;
while((m=ms_queue_get(naluq))!=NULL){
end=ms_queue_empty(naluq);
size=m->b_wptr-m->b_rptr;
if (size>ctx-