Int变量未初始化引起的播放器下载失败问题
XX局点测试发现一个问题,有Android手机下载NPVR时报错”业务不可用”。但同一个账号在另外的Android手机上进行测试时,业务正常。
通过抓包分析对比了业务正常和异常时的行为发现:异常时,播放器请求媒资索引index.m3u8时使用的是GET请求,服务端返回200;而请求二级索引***audio***.m3u8时是POST请求,服务端返回了400错误。下载正常的手机两者请求都是GET请求。
下载报错时的抓包:
正常下载时的抓包:
通过日志分析发现:日志中请求index.m3u8的时候有返回200,但请求audio_129713_deu=129200.m3u8时候,日志中没有打印返回。
分析播放器代码发现:播放器底层是C++实现的,HTTP请求类型是根据一个int变量值来判断的。
查阅资料发现:C++中,定义全局int变量未初始化其值默认是0;局部静态int变量未初始化其默认值是0;定义全局结构体中int未初始化其值默认也是0。定义局部非静态未初始化其默认值是不确定的;定义局部结构体中int未初始化其值也是不确定的。
而播放器的这个变量没有进行初始化,按默认值为0来进行Get请求。但实际情况这个Int变量值是不确定的,导致了发送了POST请求。 将Int编码初始化为0,问题解决。
后续建议:在进行变量定义时,一定要进行初始化,不能使用系统默认值。
- 点赞
- 收藏
- 关注作者
评论(0)