Giter Site home page Giter Site logo

espoirx / starrysky Goto Github PK

View Code? Open in Web Editor NEW
1.4K 16.0 208.0 71.15 MB

🔥A Powerful and Streamline MusicLibrary(一个丰富的音乐播放封装库,支持多种音频格式,完美解决你的问题。)

Home Page: https://github.com/EspoirX/StarrySky

License: MIT License

Java 14.32% Kotlin 85.68%
music music-library music-player music-manager musiclibrary exoplayer meida musiclib musicplayer audioplayer

starrysky's Introduction

A Powerful and Streamline MusicLibrary

StarrySky

StarrySky MusicLibrary Music 音频集成

一个丰富,舒服的音乐播放封装库,针对快速集成音频播放功能,减少大家搬砖的时间,你值得拥有。

项目文档

starrysky's People

Contributors

espoirx avatar huangchuting avatar rokingyang avatar windvip avatar yashikno avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

starrysky's Issues

关于对这个库的优化升级计划

随着使用这个库的人越来越多,并且也有很多小伙伴在和我交流意见,我发现其实还是很多人需要这样的一个东西的,首先我非常感恩喜欢这个库的小伙伴们。

经过了好几个版本的迭代,已经基本稳定了,当然还有不断的新需求和修复发现的Bug。
当然随之而来的就是代码变得有点臃肿或者耦合度还是有一定程度的。我一直想进行一些结构上的重构,但由于个人能力和时间精力方面都有限,暂时还没什么好想法。

这个库的实现其实用到的都是平时开发中经常用到的东西,有兴趣可以简单阅读一下代码的实现,在使用上会更加得心应手。

所以我想到的是,各位小伙伴如果感兴趣的话可以一起思考起来,在如何进行重构或者代码优化方面提出你的宝贵意见,我想把它继续优化升级。

谢谢各位。

可以播放assets目录下的吗?没有报错日志

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_IDLE这个播放状态没有

得到播放状态 ,返回值为State中的下列之一:
State.STATE_IDLE 空闲
State这个枚举根本就没有啊, 而且support-media-compat中也没有这个STATE_IDLE(我用的27.1.1版本), STATE_PAUSED倒是有.

最新版本Android 8.0 以上DeadObjectException

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)

updateRemoteViewUI方法可否加多一层判断

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.NullPointerException: Attempt to invoke virtual method 'void com.lzx.musiclibrary.control.PlayControl.stopMusic()'

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();
}

Unable to start service Intent 崩溃!

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:
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

通知栏显示布局不正确

设备:S8+,Android8.0,背景白色
我直接复制 NiceMusic 下面的文件以及文件用到的资源
view_notify_light_play.xml
view_notify_big_light_play.xml
view_notify_dark_play.xml
view_notify_big_dark_play.xml
screenshot_20180309-171652_nicemusic
第一个是NiceMusic的,第二个是我的

然后播放音乐的时候通知栏显示的是白色文字和白色图标

Android 8.0初始化完成后,退出应用,通知栏显示后台耗电

在application中初始化musicLibrary后,进入应用未播放音频,然后退出应用,通知栏显示应用在后台消耗电量,手动杀掉应用,通知栏消失。如果进入应用播放过音频,再退出应用则不显示通知。不初始化musicLibrary,一切正常。 是因为初始化后启动Service了吗?

获取音频时长问题?

我看到你的示例项目里面,音乐的时长是由后端返回的。
info.setDuration(object.getInt("file_duration") * 1000); //音乐长度

现在我这边需要客户端通过url来获取音频的时长,MusicLibrary可以做到吗?

NotificationCreater

当我在Application中创建NotificationCreater时后,播放时会报一个错误。请帮忙看一下问题所在。
tim 20180414231734
tim 20180414231830

音乐播放不了

通过接口形式获取了一个url,然后报错,这个歌是正常可以播放的,刚试过,代码是这么写的。并且先在applicaion中做了初始化
SongInfo songInfo = new SongInfo(); songInfo.setSongId(audioStreamUrl); songInfo.setSongUrl(audioStreamUrl); MusicManager.get().playMusicByInfo(songInfo);

image

通知栏创建时间显示问题

通知栏默认有一个创建时间,不应该显示,在安卓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库之后项目没任何问题)

设置音乐播放列表,第一首歌默认是播放状态,但现在想实现的功能是进入列表不自动播放,所以全部显示成暂停的界面,这个如何解决?

数据初始化:
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();第一首歌还是处于播放状态

“XXX”正在运行,点击了解详情或停止应用

将MusicLibrary集成在项目以后,就会在通知栏显示“XXX”正在运行,点击了解详情或停止应用,这样感觉不太好,这个可以去掉吗。我看qq音乐他们在后台播放的时候,也不会在通知栏显示“QQ音乐”正在运行,点击了解详情或停止应用

android.os.DeadObjectException

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)
后台播放完一首音乐之后再次进入前台点击按钮进行播放时出现这种异常

Android 8.0服务Service报错ANR

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

请问能支持rtmp吗?

我看是能支持m3u8的, 但是不支持rtmp,比如说这个
rtmp://live.hkstv.hk.lxdns.com/live/hks

通知栏被清除

是否有方法控制 通知栏能否被清除
例如 音频播放时 不可被清除 没有播放时 可以被清除 Service.stopForeground(true)?

有关于通知渠道问题?

在android 8.0以上系统,每条通知都要属于一个对应的渠道,但是我看到库里面的notification_channel的值为MUSIC_LIB_Channel_ID,这样在应用信息打开“通知”管理的的时候,看到一个渠道是MUSIC_LIB_Channel_ID的渠道,建议能够提供方法改变这个渠道值。

播放失败后,无法继续

列表播放中。
断开网络,播放下一曲,loading 一会儿,提示失败。
连接网络,调用 resumeMusic 、playMusicByIndex 无法继续播放。

MusicLibrary里面的缓存框架引起了崩溃,看看如何解决咯

1 java.lang.RuntimeException:Unable to bind to service com.lzx.musiclibrary.MusicService@671efb0 with Intent { cmp=com.meten.metenenglish/com.lzx.musiclibrary.MusicService (has extras) }: java.lang.IllegalStateException: Error starting local proxy server

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)

播放不了

ExoPlayer error Response code: 401,请问这是什么问题?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.