现象
两个终端拨打VOLTE存在语音时延的问题。其中,一个终端为4G VOLTE,位于SMC站下,另外一个终端为2/3G,位于宏站下。在此场景下,随着呼叫时间变长,极大概率出现4G终端接收到的语音延迟,时间为秒级,但是2/3G终端依然正常。
定位
尝试了其他场景,包括两路VOLTE(一个终端在SMC下,一个终端在宏站下以及两个终端都在宏站/SMC下),宏站下一路VOLTE一路2/3G,均未出现时延问题。首先,需要定位时延点是在核心网还是在基站设备。在出现问题的场景下,拔掉SMC的WAN口网线后,终端在几秒内仍然能够接收到语音,说明语音包已经到达了基站设备,缓存在了基站设备或终端中。
在实验室进行复现,同时抓包,对比了交换机的镜像抓包以及基站内部tcpdump抓包,发现交换机的镜像抓包中,下行语音包以20ms的间隔均匀到达,在基站内部的tcpdump抓包中,存在攒包的现象,即较长一段时间内(几百毫秒级别),基站没有接收到任何网口数据,随后基站以极小的间隔收到了这一段的所有语音包。怀疑是由于网口的攒包现象,造成了语音时延。
做了一个测试版本,在frwk接收UDP报文的代码中,手动增加时延。在出现问题的场景下,手动构造收包时延。发现构造时延后,终端果然出现语音延迟,至此,已经基本确认了产生语音延迟的直接原因。
下一步,需要确认发生攒包现象的原因。又做了一个测试版本,可以手动创建一个指定优先级的任务,该任务持续执行死循环若干秒。在终端建立呼叫后,创建各个优先级任务进行测试&#x