MusicLibrary:一个丰富的音乐播放封装库

作者:lizixian18
链接:https://github.com/lizixian18/MusicLibrary
声明:本文是 lizixian18 投稿,转载等请联系作者获得授权。

MusicLibrary

一个丰富的音乐播放封装库,针对快速集成音频播放功能,你值得拥有。

前序

在日常开发中,如果项目中需要添加音频播放功能,是一件很麻烦的事情。一般需要处理的事情大概有音频服务的封装,播放器的封装,通知栏管理,联动系统媒体中心,音频焦点的管理,播放列表维护,各种API方法的编写等等…如果完善一点,还需要用到IPC去实现。
可见需要处理的事情非常多。
所以 MusicLibrary 就这样编写出来了,它的目标是帮你全部实现好所有音频功能相关的事情,让你可以专注于其他事情。

特点

MusicLibrary 具有下面特点:

  • 轻松播放本地和网络音频

  • 基于IPC实现音频服务,减少应用内存峰值,避免OOM。

  • 集成和调用API非常简单,音频功能几乎可以集成到一个语句中。

  • 提供丰富的API方法来轻松实现各种功能。

  • 用一句话,您可以自定义通知栏和系统通知栏来自定义通知栏的控件。

  • 集成MediaPlayer和ExoPlayer播放器,可自由切换

  • 支持多种音频格式并支持音频直播流(DASH, SmoothStreaming, HLS,rtmp.)。

  • 支持保存播放进度。

  • 支持边播边存功能,没网也能播。

  • 支持改变播放速度和改变播放音调。

项目状态

经过几个版本的迭代,MusicLibrary 已经基本稳定,并已经在多个项目中实践使用。

使用例子

为了更好地展示 MusicLibrary 的功能,所以写了一个简单的音乐播放器,在里面可以看到具体的使用方法, 具体请参考 NiceMusic

使用方式

1.导入library

allprojects {
   repositories {
       maven{url 'https://dl.bintray.com/lizixian/MusicLibrary'}
   }
}

dependencies {
   implementation 'com.lzx:MusicLibrary:1.3.6'
}

如果你的 appcompat-v7 包使用的是 27+,那么需要额外引用 support-media-compat 例如:

implementation 'com.android.support:support-media-compat:27.1.1'

  1. 添加 MusicLibrary 到你的 Application 中

public class NiceMusicApplication extends Application {

@Override
   public void onCreate() {
       if (!BaseUtil.getCurProcessName(this).contains(":musicLibrary")) {
           MusicLibrary musicLibrary = new MusicLibrary.Builder(this)
                             .build();
           musicLibrary.init();
       }
   }
}

初始化说明

  1. 因为音乐服务是运行在 musicLibrary 进程里面的,多进程的情况下,Application 会创建多次,所以需要加上以上判断,在非 musicLibrary 进程里面初始化。
    当然,如果你的项目中包含两个以上的进程,则判断方式需要改改,改成在你的主进程下初始化即可。

  2. 初始化的时候通过 Bulider 模式还有一些参数可以配置:

  • setAutoPlayNext(boolean autoPlayNext) 是否在播放完当前歌曲后自动播放下一首

  • setUseMediaPlayer(boolean isUseMediaPlayer) 是否使用 MediaPlayer

  • setNotificationCreater(NotificationCreater creater) 通知栏配置

  • setCacheConfig(cacheConfig) 边播边存配置

  • giveUpAudioFocusManager() 放弃音频焦点管理,放弃后,多个音频一起会混播

  1. 简单应用 (播放一首音乐):

SongInfo songInfo = new SongInfo();
songInfo.setSongId("your song Id");
songInfo.setSongUrl("your song url");

MusicManager.get().playMusicByInfo(songInfo);

最少要设置 songId 和 songUrl 才能播放。若要播放本地音频或者 assets 文件夹下的音频,或者 m3u8 等流式音频,用法一样,只要设置对 songUrl 和 songId 就行。

使用文档

  1. Model字典

    详细见 Model字典说明(https://github.com/lizixian18/MusicLibrary/blob/master/readme/model.md)

  2. 播放器API

    详细见 API说明(https://github.com/lizixian18/MusicLibrary/blob/master/readme/api.md)

  3. 通知栏集成

    详细见 通知栏集成(https://github.com/lizixian18/MusicLibrary/blob/master/readme/notification.md)

  4. 边播边存配置说明

    详细见 配置边播边存功能(https://github.com/lizixian18/MusicLibrary/blob/master/readme/playcache.md)

  5. 代码实现以及原理

    详细见 代码实现以及原理(https://github.com/lizixian18/MusicLibrary/blob/master/readme/principle.md)

PS:

  • 如果你有想法或者意见和建议,欢迎提issue,喜欢点个star。欢迎各位大佬指点指点。

开源库

推荐几个开源库

(0)

相关推荐