之前我们和大家分享过EasyDSS开发的Dash版本,EasyDSS新增Dash版本后,可允许客户端根据网络带宽情况自动选择合适的码流进行播放,便于适应网络带宽抖动,同时最大程度上为终端用户提供最好的服务质量,此外,拥有Dash技术的EasyDSS还在CDN分发方面有着更大的优势。
当我们测试EasyDSS_DASH版本时,运行程序后发现日志打印panic,如下图:
一般该问题出现的原因大部分都是Linux kernel不知道如何走了,它会尽可能把它此时能获取的全部信息都打印出来,程序中出现panic会导致程序不稳定、宕机。当发生panic之后,当前函数使用了recover,则捕获了这个错误,如上图,可以看到发生错误的位置。
经查询,发现问题出现panic,是程序代码逻辑有问题,问题出现在查找录像快照的方法中,FindAllString()返回一个数组,再取值下标未做判断越界,导致程序报panic。如下图:
此处我们优化代码,当再次获取到string数组时,系统会根据其长度大小判断所取值下标是否越界,以此来避免该类报错内容的出现。