StarrySky
MusicLibrary
Music
音频集成
一个丰富,舒服的音乐播放封装库,针对快速集成音频播放功能,减少大家搬砖的时间,你值得拥有。
🔥A Powerful and Streamline MusicLibrary(一个丰富的音乐播放封装库,支持多种音频格式,完美解决你的问题。)
Home Page: https://github.com/EspoirX/StarrySky
License: MIT License
StarrySky
MusicLibrary
Music
音频集成
一个丰富,舒服的音乐播放封装库,针对快速集成音频播放功能,减少大家搬砖的时间,你值得拥有。
哥们,你的as太高级了,我完全运行不了demo。。。
随着使用这个库的人越来越多,并且也有很多小伙伴在和我交流意见,我发现其实还是很多人需要这样的一个东西的,首先我非常感恩喜欢这个库的小伙伴们。
经过了好几个版本的迭代,已经基本稳定了,当然还有不断的新需求和修复发现的Bug。
当然随之而来的就是代码变得有点臃肿或者耦合度还是有一定程度的。我一直想进行一些结构上的重构,但由于个人能力和时间精力方面都有限,暂时还没什么好想法。
这个库的实现其实用到的都是平时开发中经常用到的东西,有兴趣可以简单阅读一下代码的实现,在使用上会更加得心应手。
所以我想到的是,各位小伙伴如果感兴趣的话可以一起思考起来,在如何进行重构或者代码优化方面提出你的宝贵意见,我想把它继续优化升级。
谢谢各位。
private void playMusic() {
SongInfo songInfo = new SongInfo();
songInfo.setSongId("1000");
songInfo.setSongName("abc");
songInfo.setSongUrl("file:///android_asset/voice/1.mp3");
MusicManager.get().playMusicByInfo(songInfo, false);
}
得到播放状态 ,返回值为State中的下列之一:
State.STATE_IDLE 空闲
State这个枚举根本就没有啊, 而且support-media-compat中也没有这个STATE_IDLE(我用的27.1.1版本), STATE_PAUSED倒是有.
control == null
无法正常使用
06-07 16:20:29.409 24058-24058/com.pop.music W/System.err: android.os.DeadObjectException
06-07 16:20:29.410 24058-24058/com.pop.music W/System.err: at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:751)
if (!TextUtils.isEmpty(mSongInfo.getAlbumInfo().getAlbumName())) {
artistName = mSongInfo.getArtist() + " - " + mSongInfo.getAlbumInfo().getAlbumName();
} else {
artistName = mSongInfo.getArtist();
}
因为app里面没有专辑的概念做通知栏的时候闪退了,后来去每一个设置播放列表的地方都去new了一个专辑信息
06-05 15:19:41.473 8712-8906/com.pop.music:musicLibrary E/ExoPlayerImplInternal: Source error.
com.google.android.exoplayer2.upstream.HttpDataSource$InvalidResponseCodeException: Response code: 403
at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.open(DefaultHttpDataSource.java:211)
at com.google.android.exoplayer2.upstream.DefaultDataSource.open(DefaultDataSource.java:147)
at com.google.android.exoplayer2.source.ExtractorMediaPeriod$ExtractingLoadable.load(ExtractorMediaPeriod.java:841)
at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:308)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1162)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:636)
at java.lang.Thread.run(Thread.java:764)
如题,我要实现拖动进度条到指定位置播放,这个怎么做
java.lang.RuntimeException:Unable to stop service com.lzx.musiclibrary.MusicService@e55f5c1: java.lang.NullPointerException: Attempt to invoke virtual method 'void com.lzx.musiclibrary.control.PlayControl.stopMusic()' on a null object reference
android.app.ActivityThread.handleStopService(ActivityThread.java:3436)
Caused by:
java.lang.NullPointerException:Attempt to invoke virtual method 'void com.lzx.musiclibrary.control.PlayControl.stopMusic()' on a null object reference
com.lzx.musiclibrary.MusicService.onDestroy(MusicService.java)
android.app.ActivityThread.handleStopService(ActivityThread.java:3419)
android.app.ActivityThread.-wrap27(ActivityThread.java)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1630)
android.os.Handler.dispatchMessage(Handler.java:102)
android.os.Looper.loop(Looper.java:154)
android.app.ActivityThread.main(ActivityThread.java:6211)
java.lang.reflect.Method.invoke(Native Method)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:793)
系统版本
Android 7.1.2,level 25
ROM
vivo/FUNTOUCH
CPU架构
arm64-v8a
建议在MusicService里面这段代码里面做下非空判断
@OverRide
public void onDestroy() {
super.onDestroy();
mBinder.stopMusic();
mBinder.releaseMediaSession();
}
java.lang.RuntimeException:Unable to create application com.stub.StubApp: java.lang.SecurityException: Unable to start service Intent { com.lzx.musiclibrary.MusicService (has extras) }: Unable to launch app for service Intent {com.lzx.musiclibrary.MusicService }: user 0 is restricted
2 android.app.ActivityThread.handleBindApplication(ActivityThread.java:4708)
4 Caused by:
5 java.lang.SecurityException:Unable to start service Intent {com.lzx.musiclibrary.MusicService (has extras) }: Unable to launch app for service Intent {com.lzx.musiclibrary.MusicService }: user 0 is restricted
6 android.app.ContextImpl.startServiceCommon(ContextImpl.java:1729)
7 android.app.ContextImpl.startService(ContextImpl.java:1702)
8 android.content.ContextWrapper.startService(ContextWrapper.java:494)
9 android.support.v4.content.ContextCompat.startForegroundService(ContextCompat.java)
10 com.lzx.musiclibrary.manager.MusicLibrary.init(MusicLibrary.java)
11 com.lzx.musiclibrary.manager.MusicLibrary.init(MusicLibrary.java)
12 com.meten.meten.app.Configurator.withMusicLibrary(Configurator.java)
13 com.meten.metenenglish.MetenApp.onCreate(MetenApp.java)
14 com.stub.StubApp.onCreate(SourceFile:115)
15 android.app.Instrumentation.callApplicationOnCreate(Instrumentation.java:1007)
16 android.app.ActivityThread.handleBindApplication(ActivityThread.java:4705)
17 android.app.ActivityThread.access$1500(ActivityThread.java:174)
18 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1458)
19 android.os.Handler.dispatchMessage(Handler.java:110)
20 android.os.Looper.loop(Looper.java:229)
21 android.app.ActivityThread.main(ActivityThread.java:5493)
22 java.lang.reflect.Method.invokeNative(Native Method)
23 java.lang.reflect.Method.invoke(Method.java:515)
24 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
25 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:676)
26 dalvik.system.NativeStart.main(Native Method)
系统版本
Android 4.4.4,level 19
ROM
Oppo/COLOROS
CPU架构
armeabi-v7a
在application中初始化musicLibrary后,进入应用未播放音频,然后退出应用,通知栏显示应用在后台消耗电量,手动杀掉应用,通知栏消失。如果进入应用播放过音频,再退出应用则不显示通知。不初始化musicLibrary,一切正常。 是因为初始化后启动Service了吗?
我看到你的示例项目里面,音乐的时长是由后端返回的。
info.setDuration(object.getInt("file_duration") * 1000); //音乐长度
现在我这边需要客户端通过url来获取音频的时长,MusicLibrary可以做到吗?
如在使用中遇到任何问题,欢迎提Issues,或者加我QQ:386707112,谢谢大家。也欢迎有大佬可以给我一些修改意见,谢谢。
边听边存代理库 友情链接:https://github.com/danikula/AndroidVideoCache
com.pop.music:musicLibrary E/ExoPlayerImplInternal: Source error.
比如这种播放地址失效了,我这边要怎么才能获取到到发生了这种错误
通知栏默认有一个创建时间,不应该显示,在安卓8(miui10)上,折叠后,直接挤压歌名部分(刚开始我以为是歌曲播放时间,尴尬)
Process: com.wmzx.unicorn:musicLibrary, PID: 26050
java.lang.UnsatisfiedLinkError: No implementation found for void com.tencent.liteav.basic.log.TXCLog.nativeLogInit() (tried Java_com_tencent_liteav_basic_log_TXCLog_nativeLogInit and Java_com_tencent_liteav_basic_log_TXCLog_nativeLogInit__)
at com.tencent.liteav.basic.log.TXCLog.nativeLogInit(Native Method)
at com.tencent.liteav.basic.log.TXCLog.init(TXCLog.java:31)
at com.tencent.liteav.basic.log.TXCLog.setConsoleEnabled(TXCLog.java:52)
集成musicLibrary库之后,腾讯云播放的集成会报错,是musicLibrary在新进程造成的吗?求解(去掉musicLibrary库之后项目没任何问题)
我想问你试自己跟着google的api,一步步自己写出来的吗?想知道如何从无到有,到整个音乐播放器贡呢的完成。
播放完成与播放停止是同一个回调,两者间是否区分更加好些
数据初始化:
MusicManager.get().setPlayList(mDatas);
//添加一个观察者
MusicManager.get().addStateObservable(mAdapter);
Adapter代码:
boolean musicPlaying = MusicManager.isCurrMusicIsPlayingMusic(item);
helper.setVisible(R.id.elib_iv_check, !musicPlaying);
if (musicPlaying) {
musicPlayWaveView.setVisibility(View.VISIBLE);
musicPlayWaveView.start();
} else {
musicPlayWaveView.setVisibility(View.GONE);
musicPlayWaveView.stop();
}
但是我发现这样子调用代码,播放列表第一个的状态永远是在播放状态,我现在是想进入音乐列表时,全部是暂停的状态,显示暂停的UI,即使我在MusicManager.get().addStateObservable(mAdapter);后面添加上MusicManager.get().stopMusic();第一首歌还是处于播放状态
将MusicLibrary集成在项目以后,就会在通知栏显示“XXX”正在运行,点击了解详情或停止应用,这样感觉不太好,这个可以去掉吗。我看qq音乐他们在后台播放的时候,也不会在通知栏显示“QQ音乐”正在运行,点击了解详情或停止应用
SongInfo songInfo = new SongInfo();
songInfo.setSongId("Id");
songInfo.setSongUrl("http://zhangmenshiting.qianqian.com/data2/music/90fb2ed26f4e5fbd8efa4a7144758421/569080853/569080853.mp3?xcode=333db5ac3240bd1308a65907a49a17b0");
MusicManager.get().playMusicByInfo(songInfo);
我只传了id和url,为什么不能播放,还需要其他操作么,权限都有,Application里也添加了MusicLibrary
android.os.DeadObjectException
at android.os.BinderProxy.transactNative(Native Method)
at android.os.BinderProxy.transact(Binder.java:503)
at com.lzx.musiclibrary.aidl.source.IPlayControl$Stub$Proxy.getCurrPlayingMusic(IPlayControl.java:883)
W: at com.lzx.musiclibrary.manager.MusicManager.getCurrPlayingMusic(MusicManager.java:554)
后台播放完一首音乐之后再次进入前台点击按钮进行播放时出现这种异常
ActivityManager: ANR in com.dachun.dazhihui:musicLibrary
PID: 1612
Reason: Context.startForegroundService() did not then call Service.startForeground()
查阅资料可能是如下问题:
https://blog.csdn.net/lylddingHFFW/article/details/78219327?locationNum=6&fps=1
详细信息:
Load: 0.0 / 0.0 / 0.0
CPU usage from 5782ms to 0ms ago (2018-06-30 12:03:53.060 to 2018-06-30 12:03:58.842):
79% 1201/system_server: 60% user + 19% kernel / faults: 96056 minor 339 major
30% 2329/com.huawei.systemmanager:service: 25% user + 4.9% kernel / faults: 69166 minor 313 major
17% 7563/com.google.android.gms: 13% user + 3.9% kernel / faults: 6685 minor 131 major
1% 30189/com.huawei.appmarket: 0.7% user + 0.2% kernel / faults: 8874 minor 62 major
7.8% 4136/com.android.systemui: 6.1% user + 1.7% kernel / faults: 4619 minor 34 major
7.5% 2248/com.huawei.powergenie: 3.4% user + 4.1% kernel / faults: 4362 minor 30 major
0.8% 29192/android.process.media: 0.6% user + 0.2% kernel / faults: 828 minor 2 major
6.7% 423/logd: 3.9% user + 2.7% kernel / faults: 11 minor
6.3% 30843/adbd: 1.5% user + 4.8% kernel / faults: 2648 minor
6.2% 248/mmc-cmdqd/0: 0% user + 6.2% kernel
4.4% 8439/com.huawei.android.launcher: 3.4% user + 1% kernel / faults: 10906 minor 21 major
0.5% 15422/com.huawei.systemmanager: 0.3% user + 0.1% kernel / faults: 5732 minor 28 major
3.6% 660/[email protected]: 0.5% user + 3% kernel
3.4% 690/surfaceflinger: 1.7% user + 1.7% kernel / faults: 102 minor
3.2% 1321/logcat: 1.2% user + 2% kernel / faults: 8054 minor
3% 2268/com.android.phone: 1.8% user + 1.2% kernel / faults: 1467 minor 21 major
2.9% 12379/kworker/u16:5: 0% user + 2.9% kernel
2.5% 727/dubaid: 1.5% user + 1% kernel / faults: 3450 minor
2.4% 424/servicemanager: 0.8% user + 1.5% kernel
2.4% 26400/kworker/0:2H: 0% user + 2.4% kernel
0.3% 7459/com.google.android.gms.persistent: 0.2% user + 0.1% kernel / faults: 1072 minor 695 major
1.7% 1132/kworker/u16:6: 0% user + 1.7% kernel
0.1% 2405/kworker/u16:10: 0% user + 0.1% kernel
1.3% 94/smcthread/0: 0% user + 1.3% kernel
1.3% 726/hwpged: 0.1% user + 1.2% kernel / faults: 7 minor
1.2% 23897/com.huawei.skytone: 1.2% user + 0% kernel / faults: 567 minor 6 major
0.1% 31502/kworker/u16:19: 0% user + 0.1% kernel
1% 31526/kworker/u16:21: 0% user + 1% kernel
0.8% 125/kswapd0: 0% user + 0.8% kernel
0.8% 262/ts_thread:0: 0% user + 0.8% kernel
0.8% 2221/com.huawei.hiview: 0.5% user + 0.3% kernel / faults: 161 minor 2 major
0.1% 2237/com.huawei.systemserver: 0% user + 0% kernel / faults: 301 minor 14 major
0.8% 3290/rild: 0.3% user + 0.5% kernel / faults: 37 minor 3 major
0.1% 8321/com.android.nfc: 0% user + 0% kernel / faults: 1667 minor 12 major
0.8% 10673/com.huawei.health:DaemonService: 0.8% user + 0% kernel / faults: 565 minor 5 major
0.8% 24214/com.alibaba.android.rimet: 0.6% user + 0.1% kernel / faults: 284 minor 179 major
0.8% 31448/kworker/u16:18: 0% user + 0.8% kernel
0% 27/kworker/4:0H: 0% user + 0% kernel
0.6% 504/netd: 0.1% user + 0.5% kernel / faults: 203 minor
0.6% 684/[email protected]: 0.3% user + 0.3% kernel / faults: 5 minor
0.6% 689/lmkd: 0% user + 0.6% kernel
0.6% 7595/com.baidu.input_huawei: 0.3% user + 0.3% kernel / faults: 681 minor 30 major
0% 7617/com.huawei.recsys: 0% user + 0% kernel / faults: 365 minor 8 major
0% 26820/com.huawei.intelligent: 0% user + 0% kernel / faults: 1039 minor 294 major
0.6% 32559/com.tencent.mm: 0.6% user + 0% kernel / faults: 299 minor 31 major
0.5% 1//init: 0.3% user + 0.1% kernel
0% 310/kworker/7:1H: 0% user + 0% kernel
0% 506/zygote: 0% user + 0% kernel / faults: 391 minor
0.5% 659/[email protected]: 0% user + 0.5% kernel / faults: 16 minor
0.5% 692/powerlogd: 0.5% user + 0% kernel / faults: 3 minor
0% 842/kworker/u16:1: 0% user + 0% kernel
0.5% 23840/kworker/u16:14: 0% user + 0.5% kernel
0% 32238/com.tencent.mm:exdevice: 0% user + 0% kernel / faults: 1218 minor 897 major
0.3% 3/ksoftirqd/0: 0% user + 0.3% kernel
0.3% 7/rcu_preempt: 0% user + 0.3% kernel
0% 31/kworker/5:0H: 0% user + 0% kerne
我看是能支持m3u8的, 但是不支持rtmp,比如说这个
rtmp://live.hkstv.hk.lxdns.com/live/hks
后播放的会暂停先播放的,有没有办法实现同时播放?
是否有方法控制 通知栏能否被清除
例如 音频播放时 不可被清除 没有播放时 可以被清除 Service.stopForeground(true)?
ExoPlayer error Unable to connect to http://127.0.0.1:40397/http%3A%2F%2Foss.mglmusic.cn%2Faudio%2Fmusic%2F227%2FJFPf5NDmAz.mp3
这是错误信息
在android 8.0以上系统,每条通知都要属于一个对应的渠道,但是我看到库里面的notification_channel的值为MUSIC_LIB_Channel_ID,这样在应用信息打开“通知”管理的的时候,看到一个渠道是MUSIC_LIB_Channel_ID的渠道,建议能够提供方法改变这个渠道值。
准备在实际项目中使用,看到22个小时之前还有更新,是否现在功能完善?可以实际使用?
列表播放中。
断开网络,播放下一曲,loading 一会儿,提示失败。
连接网络,调用 resumeMusic 、playMusicByIndex 无法继续播放。
音乐播放完成会有多次回调
2 android.app.ActivityThread.handleBindService(ActivityThread.java:2924)
3 ......
4 Caused by:
5 android.system.ErrnoException:socket failed: EACCES (Permission denied)
6 libcore.io.Posix.socket(Native Method)
7 libcore.io.BlockGuardOs.socket(BlockGuardOs.java:282)
8 libcore.io.IoBridge.socket(IoBridge.java:604)
9 java.net.PlainSocketImpl.create(PlainSocketImpl.java:198)
10 java.net.PlainServerSocketImpl.create(PlainServerSocketImpl.java:38)
11 java.net.ServerSocket.(ServerSocket.java:104)
12 com.danikula.videocache.HttpProxyCacheServer.(HttpProxyCacheServer.java)
13 com.danikula.videocache.HttpProxyCacheServer.(HttpProxyCacheServer.java)
14 com.danikula.videocache.HttpProxyCacheServer$Builder.build(HttpProxyCacheServer.java)
15 com.lzx.musiclibrary.playback.player.ExoPlayback.(ExoPlayback.java)
16 com.lzx.musiclibrary.control.PlayControl.(PlayControl.java)
17 com.lzx.musiclibrary.control.PlayControl.(PlayControl.java)
18 com.lzx.musiclibrary.control.PlayControl$Builder.build(PlayControl.java)
19 com.lzx.musiclibrary.MusicService.onBind(MusicService.java)
20 android.app.ActivityThread.handleBindService(ActivityThread.java:2911)
21 android.app.ActivityThread.access$2000(ActivityThread.java:153)
22 android.app.ActivityThread$H.handleMessage(ActivityThread.java:1439)
23 android.os.Handler.dispatchMessage(Handler.java:102)
24 android.os.Looper.loop(Looper.java:148)
25 android.app.ActivityThread.main(ActivityThread.java:5441)
26 java.lang.reflect.Method.invoke(Native Method)
27 com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:738)
28 com.android.internal.os.ZygoteInit.main(ZygoteInit.java:628)
在列表中快速点击歌曲进行切换,会导致当前播放歌曲与所选中歌曲不一样!用你的NICEMUSIC试了一下,也是一样的问题
ExoPlayer error Response code: 401,请问这是什么问题?
目前很多FM、知识付费类型的音频内容都是连载形式的,播放的时候希望能够支持倒序播放,是否考虑增加支持?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.