Video视频播放中断问题排查记录


 

问题描述:

       自视频播放功能上线以来,经过初步的测试发现,视频播放一段时间后会出现中断的情况,中断的播放时长不固定(有的在三分钟左右中断,有的在十几分钟才中断),刷新后又能接着播放,但马上又中断了,出现类似提示:

问题排查:

分析可能出现的原因:

1、 网络问题。

2、 代码问题。

3、 videojs问题。

4、 视频格式问题(毕竟经过转换)。

5、 服务器问题(最容易忽略的原因)。

针对可能出现的原因逐一排查:

  1)网络问题:怎么刷新都还是有问题(有时候刷新后能接着播放),于是排除网络原因。

  2)代码问题:看到错误的第一反应就是查看浏览器控制台,看是否有蛛丝马迹,果然是有错误提示,百度这个提示给出的大部分答案是浏览器不支持此视频播放,但显然不是,因为都播放了一段时间了才出现的。

那只能去看tomcat日志信息了,发现后台也有异常提示,但不是每次刷新都会提示

开始排查后端代码,发现有一段代码使用了FileInputStream后没关闭,将此流关闭后异常确实报的没那么频繁了,可问题依然存在。

       3)videojs问题:视频播放采用videojs,开始尝试用不同的浏览器测试播放功能,排查videojs版本与浏览器的兼容性问题,将原来的5.8.0版本换成7.10.2版本发现播放好像好了一点,再尝试换了几个版本效果也差不多。换火狐和IE浏览器测试,测了大概3轮都能正常播放。火狐在第4轮测试发现还是会出现自动暂停的情况,点播放后可以接着放,IE浏览器没再顾得上,说明问题还是存在的。(测试太耗时且测试的数据量不大,代表性不强)

       4)格式问题:视频是经过其它部门的兄弟进行过格式转换过,怀疑可能是转换过程中视频的某项参数配置有问题,于是各种百度ffmpeg的用法,费时费力的进行各种转换测试,可结果还是不尽人意,问题还是没得到解决。

       5)服务器问题:这真是一个最容易让人忽略的原因,毕竟服务器运行好几年了,对它还是比较自信的,去查看tomcat的server.xml配置发现几乎没做过任何改动(除了端口号),tomcat默认的参数配置可能满足不了系统现有功能承载量。开始试着改server.xml参数配置,因为是视频播放,可能比较吃带宽,当带宽比较小的时候可能会出现超时中断的情况,于是把默认的链接超时时间由20000改成60000,测试了十几个视频后发现都能正常播放了。初步确定是tomcat服务器参数配置的问题了,开始设置不同的参数进行测试验证,从jvisualvm监控数据可以看出,线程数访问数已经远远超过了tomcat默认(200)配置的线程访问量,超过这个数量的连接将被等待甚至超时放弃,所以我们需要提高这方面的处理能力。

解决方案:

修改tomcat配置,配置如下:


<Executor name="tomcatThreadPool" namePrefix="gy-catalina-exec-"
     maxThreads="500" minSpareThreads="20" maxSpareThreads="50" maxIdleTime="60000"/>


<Connector executor="tomcatThreadPool"
          port="8080" protocol="HTTP/1.1"
          URIEncoding="UTF-8"
          connectionTimeout="30000"
          enableLookups="false"
          disableUploadTimeout="false"
          connectionUploadTimeout="150000"
          acceptCount="300"
          keepAliveTimeout="120000"
          maxKeepAliveRequests="150"
          compression="on"
          compressionMinSize="2048"
          compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,image/gif,image/jpg,image/png" 
          redirectPort="8443" />

配置说明:参考官方文档http://tomcat.apache.org/tomcat-8.0-doc/config/http.html