Giter VIP home page Giter VIP logo

imusic's Introduction

iMusic

此项目已不再更新维护!!!

视频播放需求请使用:iPlayer,功能特性支持包括但不限于:

  • 支持网络地址、直播流、本地Assets和Raw资源文件播放
  • 支持播放倍速、缩放模式、静音、镜像等功能设置
  • 支持自定义视频解码器、自定义控制器、自定义UI交互组件
  • 支持多播放器同时播放
  • SDK默认控制器(局部UI交互可自定义)支持手势控制、付费试看等交互
  • 支持任意位置启动Activity级别悬浮窗口播放
  • 支持任意位置启动全局悬浮窗口播放
  • 支持任意位置直接启动全屏播放
  • 支持连续播放视频列表

免责声明:

此项目中应用到了自行收藏的歌单列表、酷狗API、开眼API,纯属Demo演示,无任何商业用途,禁止任何人将示例项目中的第三方API应用于商业用途,如果使用了,连带的法律责任与本作者无关!

音乐播放器:Android音乐播放器封装

视频播放器:Android视频播放器封装

基于原生MediaPlayer解码器封装的音乐播放器和视频播放器功能库。极简接入、功能全面、体积甚小。欢迎Star!欢迎下载apk体验!
iMusic示例工程主要界面遵循MVP**开发,搜索音乐API取自《酷狗音乐》开放API,视频资源API取自《开眼视频》。禁止直接使用此项目中的API于商业行为中,一经使用,与本作者无关!


功能演示及概述:

功能演示:(更多功能快照在结尾处)

  • 音乐播放器预览(如播放不流畅请点击图片查看)
  • 视频播放器预览

功能概述:

1.音乐播放器

  • 网络音乐播放
  • 本地音乐检索播放
  • 全局悬浮窗口播放,精准的扇形区域碰撞检测
  • 搜索歌手、专辑、歌曲名播放(iMusic)
  • 播放器歌词显示、自定义歌词解析器(>=1.0.7)
  • 自1.0.9版本起开放 退出APP后,后台播放能力。iMusic已对重开处理
  • 基本常规操作示例播放器
  • 锁屏播放控制
  • 自定义唱片机、锁屏界面、通知栏
  • 状态栏通知控制
  • 定时关闭播放
  • 播放模式设置
  • 对音乐收藏至本地
  • 最近播放记录浏览
  • 已对音频输出焦点管理作处理

2.视频播放器

  • 支持自定义视频控制器
  • 支持自定义封面控制器
  • 支持自定义手势识别调节器
  • 支持4种画面缩放模式设置
  • 支持界面跳转无缝衔接播放
  • 迷你小窗口播放、支持屏幕中拖拽
  • 全局悬浮窗播放、支持屏幕全局拖拽
  • 全屏播放下手势识别调节音量、屏幕亮度、快进、快退
  • 支持全局悬浮窗播放器中无缝切换至Activity播放界面
  • 列表单例播放
  • 列表横竖屏切换
  • 常规横竖屏切换
  • 已对视频输出焦点管理作处理

历史版本

查看历史版本

一.音乐播放器集成:

1.依赖

  • 项目根build.gradle中加入:
    allprojects {
        repositories {
            maven { url 'https://jitpack.io' }
        }
    }
  • 模块build.gradle中加入:
    dependencies {
        implementation 'com.github.hty527.iMusic:music-player:1.2.0'
    }

2.MainActivity播放器初始化

    @Override
    protected void onCreate() {
        super.onCreate();
        //初始化播放器内部存储及服务组件。此initialize方法为重载方法,请阅读内部入参说明
        MusicPlayerManager.getInstance().init(getApplicationContext()).initialize(MainActivity.this);
        //其他功能初始化请下方【其他功能初始化】
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //播放器反初始化。此方法为重载方法,请阅读内部入参说明
        MusicPlayerManager.getInstance().unInitialize(MainActivity.this);
    }

完整初始化其他功能初始化
3.开始播放你的音频任务

    /**
     * audios:待播放的歌单列表,音频对象需继承BaseAudioInfo类,请阅读类中成员属性注解
     * position:开始播放的位置(位于audios中的index)
     */
    MusicPlayerManager.getInstance().startPlayMusic(List<?> audios,int position);

4.音乐歌词

    歌词解析及显示功能在>=1.0.7版本起提供支持,具体使用请参考唱片机类MusicJukeBoxView。(持续优化中)
    iMuisc内置网络歌词解析仅支持酷狗音乐(搜索模块播放的歌曲)。

具体使用和说明详见播放器歌词
5.权限声明

    <!--网络状态检查-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!--锁屏下继续缓冲-->
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
  • Demo内置一套完整的UI交互播放器,请注册监听事件MusicPlayerManager.getInstance().addOnPlayerEventListener(this);并参照MusicPlayerActivity集成。

代码混淆和自定义交互及其他功能


二.视频播放器集成:

1.依赖

    dependencies {
        implementation 'com.github.hty527.iMusic:video-player:1.2.0'
    }

2.xml中引入播放器通道布局

    <com.video.player.lib.view.VideoPlayerTrackView
        android:id="@+id/video_track"
        android:layout_width="match_parent"
        android:layout_height="200dp"
        app:video_autoSetCoverController="true"
        app:video_autoSetVideoController="true"/>

        //开启默认封面控制器
        app:video_autoSetCoverController="true"
        //开启默认视频交互控制器
        app:video_autoSetVideoController="true"

你也可以在java代码中创建播放器,前往视频播放器Wiki介绍

3.播放器初始化及基本数据设置

    mVideoPlayer = (VideoPlayerTrackView) findViewById(R.id.video_player);
    //开始准备播放
    mVideoPlayer.startPlayVideo(dataSource,title);
    //第二种姿势准备播放
    //mVideoPlayer.setDataSource(dataSource,title,);
    //mVideoPlayer.startPlayVideo();

4.Activity生命周期方法加入

    @Override
    protected void onResume() {
        super.onResume();
        VideoPlayerManager.getInstance().onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        VideoPlayerManager.getInstance().onPause();
    }

    @Override
    public void onBackPressed() {
        //尝试弹射返回
        if(VideoPlayerManager.getInstance().isBackPressed()){
            super.onBackPressed();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        VideoPlayerManager.getInstance().onDestroy();
        //如果你的Activity是MainActivity并且你开启过悬浮窗口播放器,则还需要对其释放
        VideoWindowManager.getInstance().onDestroy();
    }

5.权限声明:

    <!--网络状态-->
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <!--锁屏工作,防止休眠-->
    <uses-permission android:name="android.permission.WAKE_LOCK"/>
    <!--悬浮窗-->
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <!--启用通知栏需使用-->
    <uses-permission android:name="android.permission.GET_TASKS" />

6.Activity Manifest文件配置:

    <activity android:name="xxx.xxx.xxx.MainActivity"
        android:screenOrientation="portrait"
        <!--在你需要全屏播放的Activity中加上这个属性,告诉系统Activity在横竖屏切换时不要销毁Activity-->
        android:configChanges="orientation|screenSize">
    </activity>

至此基础的视频播放器项目集成完毕,更多高级功能和API请阅读自定义交互和其他Wiki

iMusic预览及下载:

强烈建议集成前先下载体验此APP,根据APP中的功能对照对应的API集成开发!!

功能快照预览:

下载地址:


**或者扫描二维码下载
**

  • 集成中遇到问题请阅读Wiki,BUG提交欢迎issues。如有其他问题,联系邮箱:[email protected]

imusic's People

Contributors

hty527 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

imusic's Issues

我很乐意为您的项目创建内容

嗨,我今天检查了你的项目。这太棒了。我期待一个基本的音乐播放器,但当我看到该应用程序的高级功能时,我感到很惊讶。我很乐意通过创建某些文档为您的项目做出贡献。隐私政策,常见问题解答,贡献者指南等。我很想知道您对此的看法。

Hi, I checked out your project today. It's really amazing. I was expecting a basic music player, but I was surprised when I saw the app's advanced features. I'd love to contribute to your project by creating certain documents. A privacy policy, FAQs, contributors guide etc. I'd love to know what you think about that.

自己定义的状态栏,点击暂停后会马上重新播放,点击结束只清除了状态栏而播放器还在继续播放

if (action.equals(MusicConstants.MUSIC_INTENT_ACTION_CLICK_PAUSE)) {
MusicPlayerManager.getInstance().playOrPause();
ToastManager.mToastshow(context, "点击了暂停");
// MusicPlayerManager.getInstance().getPlayerState();
//前台进程-关闭前台进程
} else if (action.equals(MusicConstants.MUSIC_INTENT_ACTION_CLICK_CLOSE)) {
MusicPlayerManager.getInstance().stopServiceForeground();
ToastManager.mToastshow(context, "点击了关闭");
//收藏
}

音频播放没有反应

大佬好,您的iPlayer十分好用,我想使用此库作为音频播放器。在实际使用过程中,我是用addPlayMusicToTop配合play调用,却发现没有任何声音被播放,且日志无输出。麻烦大佬看一下是否设置正确。

MusicPlayerManager.getInstance().addPlayMusicToTop(BaseAudioInfo().also {
                        it.audioId = 1847746003
                        it.audioDurtion = 216837
                        it.audioName = "长街烟火"
                        it.audioCover = "https://p2.music.126.net/q39xkl_Kn4_Pv--l712jNg==/109951166028225197.jpg"
                        it.audioPath = "http://172.27.208.1:12345/Zyboy%E5%BF%A0%E5%AE%87%20-%20%E5%A0%95%20%28%E5%8F%98%E9%80%9F%E7%89%88%29.mp3"
                        it.nickname = "等什么君(邓寓君)"
                    })
                    MusicPlayerManager.getInstance().play()

audioPath是可以被访问的,已经开启cleartextTrafficPermitted, 封面也可以正常访问

没有停止播放的方法

我发现当我返回上一页面时,Activity的onDestroy方法都已经执行了,但是还是有音频在播放。请问怎样才能暂停播放?播放器的不是跟页面的生命周期绑定了吗?

集成不了

你好,你的demo写的很成熟了,很美观,体验也是极好.
问题在于集成后无法正常播放url视频, grade 和 导入module 都失败了.

您好,问下我集成视频库,播放视频为甚么播放不了?

VideoPlayerManager.getInstance().setVideoDisplayType(VideoConstants.VIDEO_DISPLAY_TYPE_CUT);
mVideoPlayer = findViewById(R.id.video_player);
int itemHeight = this.getResources().getDisplayMetrics().widthPixels * 9 / 16;
mVideoPlayer.getLayoutParams().height = itemHeight;
DetailsCoverController coverController = new DetailsCoverController(VideoPlayerActivity.this);
mVideoPlayer.setVideoCoverController(coverController, true);
mVideoPlayer.setGlobaEnable(true);
mVideoPlayer.startPlayVideo("http://baobab.kaiyanapp.com/api/v1/playUrl?vid=189024&resourceType=video&editionType=default&source=aliyun&playUrlType=url_oss", "测试一下视屏功能");

核心代码就这些点击播放时候一直转圈圈

音乐播放器的初始化可以放到application里面吗

如果不行,多个页面都需要播放是不是都要初始化和反初始化一次呢,设置的参数是不是都要重新设置一次,比如说:
//应用播放器配置
.setMusicPlayerConfig(config)
//通知栏交互,默认开启
.setNotificationEnable(true)
//常驻进程开关,默认开启
.setLockForeground(true)
//设置点击通知栏跳转的播放器界面,需开启常驻进程开关
.setPlayerActivityName(MusicPlayerActivity.class.getCanonicalName())
//设置锁屏界面,如果禁用,不需要设置或者设置为null
.setLockActivityName(MusicLockActivity.class.getCanonicalName())

编译成功,跳转播放页面崩溃

在播放得xml增加以下代码:
<com.video.player.lib.view.VideoPlayerTrackView
android:id="@+id/video_track"
android:layout_width="match_parent"
android:layout_height="200dp"
app:video_autoSetCoverController="true"
app:video_autoSetVideoController="true"/>

编译后跳转到页面报以下错误(是否需要全局初始化?项目未体现):
Caused by: android.view.InflateException: Binary XML file line #15 in com.zszs.activity:layout/activity_test: Binary XML file line #15 in com.zszs.activity:layout/activity_test: Error inflating class com.video.player.lib.view.VideoPlayerTrackView
Caused by: android.view.InflateException: Binary XML file line #15 in com.zszs.activity:layout/activity_test: Error inflating class com.video.player.lib.view.VideoPlayerTrackView
Caused by: java.lang.reflect.InvocationTargetException
at java.lang.reflect.Constructor.newInstance0(Native Method)
at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
at android.view.LayoutInflater.createView(LayoutInflater.java:854)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1006)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961)
at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123)
at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
at android.view.LayoutInflater.inflate(LayoutInflater.java:682)
at android.view.LayoutInflater.inflate(LayoutInflater.java:534)
at android.view.LayoutInflater.inflate(LayoutInflater.java:481)
at com.android.internal.policy.PhoneWindow.setContentView(PhoneWindow.java:470)
at android.app.Activity.setContentView(Activity.java:3337)
at com.zszs.activity.TestActivity.onCreate(TestActivity.kt:37)
at android.app.Activity.performCreate(Activity.java:7815)
at android.app.Activity.performCreate(Activity.java:7804)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1325)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3350)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3514)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2110)
at android.os.Handler.dispatchMessage(Handler.java:107)
at android.os.Looper.loop(Looper.java:214)
at android.app.ActivityThread.main(ActivityThread.java:7697)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
Caused by: android.view.InflateException: Binary XML file line #23 in com.zszs.activity:layout/video_default_controller_layout: Binary XML file line #23 in com.zszs.activity:layout/video_default_controller_layout: Error inflating class
Caused by: android.view.InflateException: Binary XML file line #23 in com.zszs.activity:layout/video_default_controller_layout: Error inflating class

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.