BUG修复:EasyPlayer卡在首帧的bug修改
2017-07-22 11:33
134 查看
最近发现某些手机在运行EasyPlayer播放视频时,会停留在第一帧画面,虽然有码率预示着接收端没有问题,但是画面却卡着不动.
一般来讲,这个现象有三种原因导致:
没有接收到视频帧;
解码器出错,只解出了第一帧图像;
时间戳计算有误,导致长时间sleep;
那逐一排查下.首先在媒体帧回调的地方下个断点,发现的确有视频帧接收到,并且视频帧最终正常地push到解码的队列当中了,说明第一个假设不成立.
其次,我们看看解码器,似乎也正常工作,没有打印任何异常信息.解码线程也并未退出.那也第二个原因也初步排除.
第三步,重新播放下,跟进到解码线程里面.发现最终sleep时间大的惊人.解码线程解完首帧后就一直在睡眠状态了.再跟踪一次,发现是硬解码初始化失败了,自动切换到软解码,而在软解码完成首帧解码后,未把该帧的时间戳赋值给时间戳,这样实际上首帧时间戳为0了,后续视频帧的时间戳与首帧时间戳相隔太大.sleep时间也随之变得很大.
这个bug较难出现,只有某些手机在硬解码出错后,自动切换到软解码的情况下才会出现,但是大多数手机硬解码都能正常工作.
找到问题后,解决了这个问题,就可以顺利播放了.
一般来讲,这个现象有三种原因导致:
没有接收到视频帧;
解码器出错,只解出了第一帧图像;
时间戳计算有误,导致长时间sleep;
那逐一排查下.首先在媒体帧回调的地方下个断点,发现的确有视频帧接收到,并且视频帧最终正常地push到解码的队列当中了,说明第一个假设不成立.
其次,我们看看解码器,似乎也正常工作,没有打印任何异常信息.解码线程也并未退出.那也第二个原因也初步排除.
第三步,重新播放下,跟进到解码线程里面.发现最终sleep时间大的惊人.解码线程解完首帧后就一直在睡眠状态了.再跟踪一次,发现是硬解码初始化失败了,自动切换到软解码,而在软解码完成首帧解码后,未把该帧的时间戳赋值给时间戳,这样实际上首帧时间戳为0了,后续视频帧的时间戳与首帧时间戳相隔太大.sleep时间也随之变得很大.
这个bug较难出现,只有某些手机在硬解码出错后,自动切换到软解码的情况下才会出现,但是大多数手机硬解码都能正常工作.
找到问题后,解决了这个问题,就可以顺利播放了.
相关文章推荐
- 框架 day49 BOS项目练习3(修复window控件BUG,添加/修改/作废取派员,datagrid使用,分页查询(DetachedCriteria离线),formatter函数)
- 20180225.修复密码修改功能BUG;java中equals和==功能区别
- Git 修复 bug 切换分支时,如何保存修改过的代码(即如何保存现场)?
- 修改subsonic源码,修复一个多表查询的排序bug
- JSPatch动态修改已上架app的bug,即时修复bug
- Assets修复photos修改后在assets全屏图片不对bug
- uploadify 插件使用 包含 增删,修改样式,类似邮箱里的 添加附件 功能,也修复了uploadify存在的bug
- kingcms5部分BUG修复和修改技巧
- Tinker热修复(命令行接入——未知BUG--.java文件修改不成功)
- BOS项目练习3(修复window控件BUG,添加/修改/作废取派员,datagrid使用,分页查询(DetachedCriteria离线),formatter函数)
- 图片上传4-bug修复
- 【更新】Excel组件Spire.XLS for .NET V7.12.109发布 | 修复多个重大bug
- 修改pager-taglib的两个bug
- iOS之修改项目BUG之旅--(三)
- dedecms5.7 sp1 管理后台修改权限bug
- LibreOffice 3.6.4 发布,修复超过 60 个 bug
- JNotify使用实例与BUG修复
- 修复Bug好比钓鱼
- 【BUG】---ng-show/ng-hide修改成功但没有效果
- 7-27validation验证和防止取消按钮的出错的bug修改