一个基于IJKPlayer媒体播放器的扩展库

由于公司业务用到了音频播放,于是就有了这个这篇文章。本文的主旨在于整理开发的逻辑思路,整理了逻辑图和功能图解。

项目中集成了bilibili视频播放库ijkPalyer,网上有很多教程,这里就不多介绍了。

引入
ijkPalyer地址:https://github.com/Bilibili/ijkplayer
最简单的方式,直接在app下的gradle添加:

# required
allprojects {
    repositories {
        jcenter()
    }
}

dependencies {
    # required, enough for most devices.
    compile 'tv.danmaku.ijk.media:ijkplayer-java:0.8.8'
    compile 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.8'

    # Other ABIs: optional
    compile 'tv.danmaku.ijk.media:ijkplayer-armv5:0.8.8'
    compile 'tv.danmaku.ijk.media:ijkplayer-arm64:0.8.8'
    compile 'tv.danmaku.ijk.media:ijkplayer-x86:0.8.8'
    compile 'tv.danmaku.ijk.media:ijkplayer-x86_64:0.8.8'

    # ExoPlayer as IMediaPlayer: optional, experimental
    compile 'tv.danmaku.ijk.media:ijkplayer-exo:0.8.8'
}

如果对源码有兴趣,可以将项目下的以下指出的文件夹(ijkplayer-example可根据需求进行选择)引入到app中:


目录

媒体播放器主要扩展功能:
1、播放、暂停、恢复、停止、回收、重置。
2、设置倍速。
3、设置播放进度监听和检查更新时间间隔。
4、获取播放器状态和设置监听。
5、获取媒体数据源和三种数据源设置方法。
6、获取和设置媒体配置信息。
7、数据源判断是否一致方法。
8、设置声音大小。
9、设置焦点监听,默认已管理音频的焦点。
10、销毁播放器。
附上功能图解:


媒体播放器功能图.png

逻辑图:


逻辑图解.png

用过MediaPlayer的小伙伴都知道,可以支持在线播放和播放本地资源,但是不支持缓存,这样很消耗用户流量,这里给大家介绍一个视频缓存库 AndroidVideoCache。这个库主要是做视频缓存管理功能,支持边下边播,离线播放,缓存管理等。

引入
AndroidVideoCache地址:https://github.com/danikula/AndroidVideoCache

基本原理
AndroidVideoCache 通过代理的策略将我们的网络请求代理到本地服务,本地服务再决定是从本地缓存拿还是发起网络请求,如果需要发起网络请求就先向本地写入数据,再从本地提供数据给视频播放器。这样就做到了数据的复用。

借用一张AndroidVideoCache - 视频边播放边缓存的代理策略里面的图片看的比较清楚:

原理图

播放器发起一个urlA,通过HttpProxyCacheServer转成一个本地host和端口的urlB,这样视频播放器发起请求就是向HttpProxyCacheServer请求,返回视频播放器的SocketServer再建立一个HttpProxyCacheServerClients来发起网络请求处理缓存等工作,然后把数据通过前面的Socket返回给视频播放器。

最后介绍,在做音乐播放器的时候外面一般需要写一个监听器来监听音频资源是否被抢占的监听器。我在项目里已经实现焦点监听。

这里补充一下focusChange的四种情况。

  • AUDIOFOCUS_GAIN:获取播放焦点。一般是短暂失去焦点后,恢复时回调。
  • AUDIOFOCUS_LOSS:永久失去焦点。比如被其他播放器抢占,QQ音乐在回调的时候,有对话框提示被其他播放器抢占。
  • AUDIOFOCUS_LOSS_TRANSIENT:短暂失去焦点。比如来电。
  • AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK:暂时失去焦点。比如通知,需要降低音量。

好啦,本文到这里就结束啦,后面我会将库上传到maven,方便大家依赖使用。

你可能感兴趣的:(一个基于IJKPlayer媒体播放器的扩展库)