【问题现象】
长沙视频通话测试发现:当RoHC开启,导致下行大量丢包,丢包最多达90%,视频质量很差。RoHC关闭后,无此问题。
【问题分析】
1、基站侧问题分析
(1)结合前方S1口抓的数据包,发现这些数据包都是使用的IPV6包头。查基站侧的代码,发现基站的压缩处理有以下两个问题。
问题1:基站侧在profile1的压缩流程时,没有检测RTP的扩展头是否发生变化。所以当该字段发生变化时,没有将该字段的变化带给UE侧,导致UE侧扩展头字段解错,从而导致UE侧CRC校验出错。
问题2:基站侧在profeil2的解压缩流程时,在解IPV6动态链的扩展头字段时,多偏移了一个字节,导致基站侧UDP报文CRC校验错。
以上两个BUG修改完后,视频通话时,测试结果如下:
只打开profile2,只有轻微的马赛克;
只打开profie1,无大量丢包的情况,但是马赛克现象要比只打开profile2严重。
开启profile1+proflie2比开启profile1要好。
(2)开启RoHC打印后BPL板打死的的问题,是因为原代码中将码流的打印长度设成了可变长度,后将打印长度修改成了固定长度,该方法经在实验室反复验证不会出现BPL打死的问题。
(3)通话建立起来后,图像出不来的问题,是因为编译版本采用的是增量编译的方式。将原来的编译信息删除,重新编译后无问题。
(4)当TS值不相同时,基站侧也有解错的情况。分析基站侧LOG发现是基站侧没有及时更新TS_OFFSET值的问题,从而导致TS值解错。协议规定只要压缩报文中带TS原值,基站侧都应该对TS_OFFSET进行更新,而实际上基站侧只有在IR,IR_DYN和扩展头3里带TS_STRIDE值的时候更新TS_OFFSET。
2、UE侧问题分析
(1)开启profile1+profile2时,三星终端的视频效果要比profile1要好,从基站侧的LOG分析这是因为三星终端采用profile2进行压缩。当UE采用profile2压缩时,基站处理无问题。具体分析如下:
开启profile1+profile2时,查看基站侧RoHC的统计,发现基站侧收到的压缩报文都是UDP profile(即profile2)的报文,如下截图:
同时抓取基站侧的LOG发现,基站侧的解压端收到的原始IR报文中带的profile字段的值为2,说明基站的解压侧收到的确实是profile2的压缩报文,如下截图:
协议规定IR包的第二个字节表示profile字段,该字段为2,说明收到的压缩包是用profile2进行压缩的。
基站侧解压完profile2报文后,用profile1进行压缩,这从基站侧的统计可以看出来,如下截图:
从以上图中可以看到:基站侧的压缩包类型都为profile1(即RTP包)。
按照协议描述,profile1的优先级要高于profile2的优先级。所以从原理上分析,当profile1和profile2同时打开时,视频报文(RTP报文)应该选择profile1进行压缩,而不是proflie2。所以开启profile1+profile2时,三星终端采用profile2进行压缩是有问题的。该问题已经和三星的工程师确认,现等待三星的答复。另外高通终端无此问题。当开启profile1+profile2时,高通终端采用profile1进行压缩。
(2)只开启profile1时,无论三星终端还是高通终端都会有轻微的马赛克。从UE侧的包统计来看,有一定程度的丢包。从基站侧的统计来看,基站的解压端有CRC校验错误。具体分析如下(以下是三星终端的LOG分析): UE侧发错的原始报文如下截图(解错的包Seq为39,红色框标注):
请注意解错的该包Time值与Seq为38的Time值一样,都为2216160。
基站侧解错的压缩包码流如下截图:
基站侧收到的包类型为UOR2包,扩展头为3。压缩包带的是TS_SCALE值(Time的压缩值),而不是Time原值。协议RFC4815规定,当Time值不变时,压缩时应该发送Time原值,而不是TS_SCALED的值。基站侧由于收到错误的TS_SCALE值,所以将Time值解错了。
高通终端也有相同的问题。该问题在香港NOTE3视频测试时出现过,为已知BUG,高通已经确认是芯片的问题,将在下个版本中改进。
【问题解决】
经过几天不断的测试,得出以下结论:
1、关闭RoHC,三星和高通终端在视频通话的时候,终端快速移动的时候会有马赛克,但是从UE侧的LOG来看,无丢包。怀疑马赛克的原因与带宽与终端的视频处理能力有关。
2、只开启profile2,终端在视频通话的时候,快速移动的时候也会有马赛克,从UE侧的LOG来看,高通终端无丢包,三星终端有时会有0.5%的丢包。说明此时的马赛克现象与基站侧的RoHC无关系。
3、开启profile1+profile2,高通终端的表现和只开启profile1一样,具体见第4项;三星终端无丢包,因为该终端用profile2压缩,具体分析见3.2的第1小节。
4、只开启profile1,三星和高通终端都有少许马赛克,且有丢包。从基站侧LOG分析,基站的解压侧有CRC校验错误导致的丢包。该问题是由高通芯片的BUG引起的,与基站侧无关。
- 还没有人评论,欢迎说说您的想法!