开源播放器 ijkplayer (六) :Android 下使用 ijkplayer 异常处理思路

一、 java.lang.IllegalStateException: mpjni: setOptionLong: null mp

根据已查到的资料看,目前是ijk内部的问题,只能通过try&catch的方式进行处理。

参考:https://github.com/CarGuo/GSYVideoPlayer/issues/654

参考:https://github.com/bilibili/ijkplayer/issues/2136

二、暂停的时候,退到后台再回到前台,画面黑屏

1. 可以在暂停的时候,通过TextureView.getBitmap(point.x, point.y);获取到暂停的画面,用ImageView显示它,在onSurfaceTextureUpdated的时候隐藏ImageView,来实现画面的衔接。

2. 暂停时绘制静态画面多TextureView的Surface上,详细参考GSYVideoPlayer

三、ijk在切换URL时报400错误(http与https域名共用)

ijkplayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "dns_cache_clear", 1);

四、ijkplayer onComplete异常回调

现象描述:

在Android手机上,播放视频,在播放的时候把网络关闭,当player把buffer播放完成后,会回调onCompletion和onError方法,但是视频实际上还没播放完毕。

ijkplayer 项目此问题 Issues汇总:

https://github.com/bilibili/ijkplayer/issues/193

https://github.com/bilibili/ijkplayer/issues/525

https://github.com/bilibili/ijkplayer/issues/1289

https://github.com/bilibili/ijkplayer/issues/1580

优化方案:

增加播放失败的重试机制,将-10000这个错误进行处理,给用户重试的机制。

同时,如果收到播放完成的回调的时候,增加判断逻辑,如果当前播放的时长距真正结束超过5秒,则不做播放结束的处理。 

五、ijkplayer reset()操作导致ANR

问题:IjkMediaPlayer reset() 耗时,release() 在音频未加载完时,也是耗时操作

解决:使用两个队列,一个存放可以使用的IjkMediaPlayer,一个存放待 释放的IjkMediaPlayer,待释放播放器在线程里 reset。

 

posted @ 2019-02-27 15:20  灰色飘零  阅读(6028)  评论(0编辑  收藏  举报