利用pjsua实现了语音对讲功能,PC端负责采集音频,编码,打包rtp,发送到指定端口,
接收网络rtp,解rtp包,解码,播放,但是接收到手机端发过来的rtp音频包后,播放音质很渣,一点都听不清,
利用wireshark抓包分析,发过来的音频包没有问题,可以正常播放,
深入pjsua分析,发现pjsua有过滤功能,将rtp时间戳增量小于一定值的rtp包都给忽略了,代码如下:
jbuf.c中做了忽略
static pj_status_t jb_framelist_put_at(jb_framelist_t *framelist,
int index,
const void *frame,
unsigned frame_size,
pj_uint32_t bit_info,
pj_uint32_t ts,
unsigned frame_type)
{
int distance;
unsigned pos;
enum { MAX_MISORDER = 100 };
enum { MAX_DROPOUT = 3000 };
PJ_ASSERT_RETURN(frame_size <= framelist->frame_size, PJ_EINVAL);
/* too late or sequence restart */
if (index < framelist->origin) {
if (framelist->origin - index < MAX_MISORDER) {
/* too late */
return PJ_ETOOSMALL;//时间戳间隔太小,此处返回
} else {
/* sequence restart */
framelist->origin = index - framelist->size;
}
}
//.......
修改手机端rtp时间戳增量为160解决问题