flutter ijkplayer黑屏问题

163 阅读1分钟

背景

flutter项目中使用官方video_player(基于ExoPlayer)插件播放视频,实测在android上兼容性不够好,部分机型上出现播放失败的情况,于是在项目中引入了基于ffmpeg的fijkplayer做兜底,在video_player视频播放失败时切换到ijkplayer,已知兼容场景基本上都能兜住,效果比较明显。

黑屏问题

使用fijkplayer时,偶尔发现有黑屏现象,播放器进度条正常,未发现错误日志,但是渲染的视图是黑的,找不到原因。后来在业务层面做调用分析,发现是业务逻辑比较复杂,导致页面UI操作时,有时候会多次触发同一个fijkplayer的release方法,此时如果再次创建新的fijkplayer播放器,并且播放地址和前一个播放地址完全相同时,就会必现黑屏。基于这个必现的条件,在封装层做一个过滤,只调用一次释放就正常了。

其它

fijkplayer的接口设计,看起来是async的,但是实际上使用await方法等待,返回后,状态仍然未改变,推测是flutter插件层的状态和底层实现的桥接问题,导致业务使用时,在复杂的业务场景,需要自己管理状态,使用难度远高于video_player。