seekto掉帧解决
随着项目的迭代,在调研了竞品使用的播放器方案之后,最终把播放器从原始的MediaPlayer迁移到ExoPlayer上来。原始的MediaPlayer播放器存在以下问题:
1.seekTo的时候掉帧,只能seekto到指定位置的上一个关键帧
2.进度回调不准(在轮询时间片段的时候,时间跳跃明显,多个视频串联的时候)
3.多个视频衔接的时间中卡顿(从A视频切换到B视频的过程中,需要reset播放器才能再初始化下一个MediaPlayer,无法做到无缝衔接)
4.不支持视频快慢放(或者说需要6.0以上机型)
像乐秀这样的app,在衔接处黑屏,然后再播放下一个视频,使用了IMediaPlayer,用户体验很差;Quick在播放的过程中,衔接流畅,反编译之后得知其使用了ExoPlayer。
在使用的过程中,由于无法直接使用SimExoplayerView播放,因为我们的需求需要添加滤镜,特效之类的,需要GLSurfaceView作为载体。其次,在使用SimExoplayerView播放的过程中,可以发现快速拖动进度条的时候,画面并不会实时预览,不能做到mediaplayer那样的预览效果。其后查看Quick,发现它的预览速度很快,一开始怀疑是否它们自己改了源码,实现了快速拖动的效果,后来在搞清楚了ExoPlayer的基本状态之后,弄清楚了处理的基本流程。即seekto完上一帧之后,再seekto下一帧,在seekto的过程中不再调用seekto。