二、解决思路
原因:根据我反复查看它源码,确定视频控件的宽高算的有问题,一步步去看赋值,结果是ijk的c代码计算出来的,这肯定是没法改的
开始找解决方案:
- 先去找GSYVideoPlayer的github,发现用它的最新的版本是正常的。这给了点解决它的信心
- 但是我项目还是用的是android suppourt,GSYVideoPlayer最新版用的是androidx。这时升级项目为androidx明显不行,工作量巨大,还要测试。果断放弃
- 然后去找GSYVideoPlayer6.0.3版本的,下载下来测试变形视频,结果还是变形的。这是不是没法解决了。
一度我也觉得没法解决,当然你也可以叫接口返回视频真实的分辨率,自己手动设置视频的宽高
我的发现
- 为什么最新版8.0.0没问题,然后观看了ijk等底层的库有没有变,发现没变。证明6.0.3的ijk也是能获取真实的视频宽高的
- 关键MeasureHelper的doMeasure算视频宽高方法内容变了,替换结果还是变形
- 只能在log上看看,有什么发现没有,结果恍然大悟,底层获取视频宽高的库不一样。
它demo正常的是用PlayerFactory.setPlayManager(IjkPlayerManager.class),而我项目设置的是PlayerFactory.setPlayManager(Exo2PlayerManager.class)
总的解决方案:
1、要用PlayerFactory.setPlayManager(IjkPlayerManager.class)
2、MeasureHelper的doMeasure要替换成最新版本的,如果没有的属性,相应删掉即可
还有问题,请评论或者私信我,我每天都看简书的
网友评论