Int变量未初始化引起的播放器下载失败问题

举报
HH~ 发表于 2020/03/08 17:55:43 2020/03/08
【摘要】 XX局点测试发现一个问题,有Android手机下载NPVR时报错”业务不可用”。但同一个账号在另外的Android手机上进行测试时,业务正常。 通过抓包分析对比了业务正常和异常时的行为发现:异常时,播放器请求媒资索引index.m3u8时使用的是GET请求,服务端返回200;而请求二级索引***audio***.m3u8时是POST请求,服务端返回了400错误。下载正常的手机两者请求...

    XX局点测试发现一个问题,有Android手机下载NPVR时报错业务不可用。但同一个账号在另外的Android手机上进行测试时,业务正常。 

通过抓包分析对比了业务正常和异常时的行为发现:异常时,播放器请求媒资索引index.m3u8时使用的是GET请求,服务端返回200;而请求二级索引***audio***.m3u8时是POST请求,服务端返回了400错误。下载正常的手机两者请求都是GET请求。 

下载报错时的抓包:

          image.png

正常下载时的抓包:

          image.png

通过日志分析发现:日志中请求index.m3u8的时候有返回200,但请求audio_129713_deu=129200.m3u8时候,日志中没有打印返回。

          image.png

          image.png

      分析播放器代码发现:播放器底层是C++实现的,HTTP请求类型是根据一个int变量值来判断的。

查阅资料发现:C++中,定义全局int变量未初始化其值默认是0;局部静态int变量未初始化其默认值是0;定义全局结构体中int未初始化其值默认也是0。定义局部非静态未初始化其默认值是不确定的;定义局部结构体中int未初始化其值也是不确定的。

而播放器的这个变量没有进行初始化,按默认值为0来进行Get请求。但实际情况这个Int变量值是不确定的,导致了发送了POST请求。 Int编码初始化为0,问题解决。

 

        后续建议:在进行变量定义时,一定要进行初始化,不能使用系统默认值。


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。