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'
添加 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();
}
}
}
初始化说明
因为音乐服务是运行在 musicLibrary 进程里面的,多进程的情况下,Application 会创建多次,所以需要加上以上判断,在非 musicLibrary 进程里面初始化。
当然,如果你的项目中包含两个以上的进程,则判断方式需要改改,改成在你的主进程下初始化即可。初始化的时候通过 Bulider 模式还有一些参数可以配置:
setAutoPlayNext(boolean autoPlayNext) 是否在播放完当前歌曲后自动播放下一首
setUseMediaPlayer(boolean isUseMediaPlayer) 是否使用 MediaPlayer
setNotificationCreater(NotificationCreater creater) 通知栏配置
setCacheConfig(cacheConfig) 边播边存配置
giveUpAudioFocusManager() 放弃音频焦点管理,放弃后,多个音频一起会混播
简单应用 (播放一首音乐):
SongInfo songInfo = new SongInfo();
songInfo.setSongId("your song Id");
songInfo.setSongUrl("your song url");
MusicManager.get().playMusicByInfo(songInfo);
最少要设置 songId 和 songUrl 才能播放。若要播放本地音频或者 assets 文件夹下的音频,或者 m3u8 等流式音频,用法一样,只要设置对 songUrl 和 songId 就行。
使用文档
Model字典
详细见 Model字典说明(https://github.com/lizixian18/MusicLibrary/blob/master/readme/model.md)
播放器API
详细见 API说明(https://github.com/lizixian18/MusicLibrary/blob/master/readme/api.md)
通知栏集成
详细见 通知栏集成(https://github.com/lizixian18/MusicLibrary/blob/master/readme/notification.md)
边播边存配置说明
详细见 配置边播边存功能(https://github.com/lizixian18/MusicLibrary/blob/master/readme/playcache.md)
代码实现以及原理
详细见 代码实现以及原理(https://github.com/lizixian18/MusicLibrary/blob/master/readme/principle.md)
PS:
如果你有想法或者意见和建议,欢迎提issue,喜欢点个star。欢迎各位大佬指点指点。