搬砖之路----MusicPlayer 一个基于Vlc(2.0+)开发的android音乐播放器--浅析在android开发过程中播放器选择之路!
前言
MusicPlayer 是一款基于vlc播放器开发的一个音乐播放器,你也可以理解为在此核心上的搬砖之路,核心的内容并不是我写的,因此在正式写blog之前,感谢那些vlc核心的开发人员让我用到这么好用的播放器,本片文章主要是在此基础上添加一些我们常用的业务逻辑!本篇文章的目的是简单介绍此项目的用法,并且记录自己在使用过程中的一些心得,如果有错欢迎指正!本篇文章未经授权不得转载!
正文
入行Android开发也接近三年了,这三年中也遇到过坑无数,也学到了很多东西!我所呆的这两家公司都是跟多媒体有关,因此,我也是跟播放器打交道有一段时间了,公司产品不停的更迭,再次过程中,产品的需求也是越来越奇葩,加上一些服务器的选择,播放器的选择也是越来越重要,我先简单的介绍一下我们android开发常用的几款开源播放器!
Mediaplayer
ijkplayer
vitamio
vlc 播放器
Mediaplayer(系统自带的播放器)
这款播放器是系统自带的播放器,具体api我就不多数,网上一搜一大把,我来说说我为什么不用这款播放器,这款播放器在播放格式上基本上是能播放所有的音视频封装格式(本地播放),在很多公司的使用过程中,音视频基本上是有两种方式提供给播放器的,一种是以文件的方式让播放器播放,还有一种是以流媒体的方式让播放器播放,其中选择当然是根据公司的业务需求所决定,当然我们公司是没有财力搭建一个流媒体播放器的,因此公司使用的主要服务器就是一个文件服务器,提供一个http的文件地址去下载播放,我们的Mediaplayer是支持这种播放的方式,但是很可惜,他并不支持流媒体的播放,因此选择还是看具体的需求!
ijkplayer 音乐播放器
这款大名鼎鼎的播放器也是我比较喜欢的播放器,这款播放器是现在网上主流的流媒体播放器,bilibili网站的播放器就是根据这个开源框架开发的播放器,这款播放器也是我向搭建推介的一款播放器,要是开发者使用的服务器是流媒体播放器建议大家使用。但是美中不足的是,这款播放器并不能播放上述的文件服务器的多媒体,他只能提供流媒体服务器式的播放,要是你喷我说,现在还有什么公司不搭建流媒体了,这么low。我只能说,这种东西跟公司有关跟技术无关,因此我个人认为某公司的播放器是无罪的,某大佬马上要回归,祝贺一下,挺你的技术无罪!!
vitamio 播放器
这款播放器让人又爱又疼,他是能满足以上两款播放器的所有需求的,既能播放文件的多媒体,又能播放流媒体式的多媒体,但是唯一不足的就是,这个播放器是个人免费,公司是要授权给钱的啊!具体的,自行百度!
vlc 播放器
这款播放器是我们吹的主角,为什么我会选择用这款播放器的,当然跟公司需求有关系啦,当初的的需求是播放文件式服务器的多媒体文件,于是我当时选用的是Mediaplayer播放器去播放的,后来经理说,我们的产品可能要对接一部分电视服务,电视的是以rtsp开头的流媒体,于是乎在开发过程中选用了vitamio(此中xxxx不解释),这件事没那么简单,在产品开发快要完成的时候,突然来了个需求要播放组播多媒体,我了个去,这个组播是有台组播机器,能转发一个组播源,同一个局域网的都可以获取其数据,但是vitamio不能播放这种音视频啊,这可难为死我们了,于是乎问了谷歌爸爸(再次黑一波百度广告多,重复的东西多),找到了这款神器 vlc播放器,他不仅能播放文件流,还能播放流媒体,并且这个爸爸还能播放组播电视,最关键的是免费的!卧槽!有什么理由不用,瞬间有爱!
MusicPlayer 说说主角吧
一款基于vlc(2.0+)封装的音乐播放器,方便于以后搬砖使用,尽量简化于播放器的逻辑处理,让开发者专注于接口调用和业务实现,主要api的业务功能我给大家简单介绍下,如果你喜欢,欢迎使用!无论你是在service还是在activity中调用都能很快的集成你想要的,对接api列表能迅速的完成页面的对接!现在附上github链接:
https://github.com/xmtggh/MusicPlayer
希望大家看到后帮忙star一下
- 播放
- 暂停
- 上一首
- 下一首
- 重置
- 随机播放
- 顺序播放
- 单曲循环
- 播放进度
- 声音大小设置
使用方法
1.根目录下的build.gradle添加
maven { url "https://jitpack.io"}
allprojects {repositories {google()jcenter()maven { url "https://jitpack.io"}}}
2. 使用的model中添加
compile 'com.github.xmtggh:musicPlayer:1.0.1'
初始化示例
mPlayer = new Player.Buidler().setAutoPlay(true).setContext(MainActivity.this).setPlayList(mPlayList).setEventListener(new Player.PlayerEventListener() {@Overridepublic void onEvent(MediaPlayer.Event event) {switch (event.type) {case MediaPlayer.Event.EndReached:Log.d("music", "播放完毕");break;case MediaPlayer.Event.Playing:Log.d("music", "正在播放");break;case MediaPlayer.Event.Paused:Log.d("music", "播放暂停");break;case MediaPlayer.Event.Stopped:Log.d("music", "播放停止");break;case MediaPlayer.Event.EncounteredError:Log.d("music", "播放异常");break;case MediaPlayer.Event.PositionChanged:Log.d("music", "最大播放进度" + mPlayer.getMaxPostion());Log.d("music", "当前播放进度" + mPlayer.getCurrentPostion());break;default:break;}}}).create();
初始化api
setAutoPlayer(true:自动播放,false:手动播放)
是否自动播放,即无需调用play方法,初始化完成后直接播放
setContext
获取当前上下问对象
setPlayList
初始化播放列表
setEventListener
播放器时间监听方法,示例代码已包含其意义!
操作api介绍
包括一些基本的操作,上一首,下一首,暂停,开始,重置,播放单曲!
mPlayer.start();
开始播放
mPlayer.reset();
重置当前播放歌曲
mPlayer.pause();
暂停播放
mPlayer.nextSong();
播放下一首,当前只能在有播放列表的情况下使用
mPlayer.preSong();
播放上一首
mPlayer.getMaxPostion()
获取当前歌曲最大进度long类型
mPlayer.getCurrentPostion()
获取当前播放进度
mPlayer.setProgress(long progress)
设置播放进度
mPlayer.setVolume(int progress)
设置播放音量大小,目前最大值为300 可根据需求动态调整
mPlayer.randomModel()
设置为随机播放
mPlayer.sequenceModel()
设置为顺序播放
mPlayer.loopModel()
设置为单曲循环
最后
记得添加网络权限哦
<uses-permission android:name="android.permission.INTERNET" />
版本信息
1.0.2(尚未规划(解决bug为主))
1.0.1(已完成2017.12.14)
1.0.0(已完成2017.11.16)
版本内容
1.0.0
初次提交,播放器可设置在service或者activity中运行,具有播放,暂停,上一首,下一首,开始,重置,获取播放进度等功能
1.0.1
添加可拖动进度api 设置音量大小,添加播放模式(随机,顺序,单曲播放等)
1.0.2
尚未完成,目前规划修复一些未知的bug
闭幕
欢迎大家来fork和点赞,若是有bug请随意提起,欢迎各种商用或者demo,免费纯净版!最后当前会留一些彩蛋,这是我搬砖之路第一篇文章,我不知道在座的各位你是否看到这里,给看到的说说我在vlc播放器使用过程中遇到的一些坑,流媒体的文件自然不必多说,若是大家在播放文件式的多媒体过程中,是无法播放metadata 头在尾部的MP4文件的,那些MP4文件的metadata 是在尾部的查看之法请大家自行百度,这个是针对视频而言的,并且avi格式的视频是没有视频只有声音的,因此一个格式工厂就能搞定的东西我就不多bb了!先写到这里吧!
搬砖之路----MusicPlayer 一个基于Vlc(2.0+)开发的android音乐播放器--浅析在android开发过程中播放器选择之路!相关推荐
- 一个基于cocos2d-x 3.0和Box2d的demo小程序
一个基于cocos2d-x 3.0和Box2d的demo小程序 p图demo小应用.想怎么p就怎么p 本文參考于http://blog.csdn.net/xiaominghimi/article/de ...
- 开发一个基于Dalvik字节码的相似性检测引擎,比较同一款Android应用程序的不同版本之间的代码差异(二)
上文我们说过,<针对Dalvik字节码的相似性检测引擎,比较同一款Android应用程序的不同版本之间的代码差异>这篇文章计划分两个部分来讲解,上文只介绍了如何利用Quarkslab公司开 ...
- DeskViewer基于Silverlight 2.0开发的个性相册展示系统
这是一个DeskViewer基于Silverlight 2.0开发的个性相册展示系统,通过XML取得图片和音乐的数据,图片的排列是随机的,可以重排,可以对图片的缩放.旋转.拖放.链接.下载.显示原图等 ...
- 基于opencv tensorflow2.0开发的人脸识别锁定与解锁win10屏幕实战
基于opencv tensorflow2.0开发的人脸识别锁定与解锁win10屏幕实战 基于opencv tensorflow2.0开发的人脸识别锁定与解锁win10屏幕 前言 运行python环境 ...
- 基于VC++6.0开发俄罗斯方块(五)
开始游戏 一.开始游戏模块概述 二.显示俄罗斯方块 注意:开始游戏之后,俄罗斯方块会显示在游戏窗口和右侧的方块预览界面上,这两部分是有联系的,在方块的预览界面上出现的方块类型,就是在游戏窗口下一个会出 ...
- 基于经典蓝牙的安卓蓝牙APP开发(基于蓝牙2.0开发,例:HC-05)
基于经典蓝牙的安卓蓝牙开发-串口 一.展现广播的三种方式 1.通知: 2.对话框: 3.消息提示框 2.在使用Android蓝牙适配器中的startDiscovery需要先打开定位服务 3.在连接蓝牙 ...
- nubia ui 5.0 android,国内首家 基于安卓5.0开发nubia UI公测
[PConline 资讯]3月9日最新消息,受安卓5.0的吸引和Moto在国内使用Android 5.0原生系统的影响,国内手机厂商也纷纷推出基于Android 5.0的系统升级,其中nubia手机的 ...
- 大神级教程!300分钟撸一个基于Redis 6.0 版本的高并发架构
刚好原先公司搞职位调整,我不太满意,赶上这波金三银四的面试浪潮,干了也有5年的后端开发了,不是大神也是有实战经验的,我就自信满满地去面了几家大厂,结果就遇到... 面试官这夺命连环12问,谁顶得住? ...
- 基于Springboot + Vue2.0开发的 IM 在线聊天
1. 项目介绍 多聊Chat是一个网页版在线即时聊天项目,前端使用 Element-ui,后端采用了基于 Springboot开发的,并使用 WebSocket 服务进行消息实时推送. 目前后端 We ...
最新文章
- Chemistry.AI | 基于卷积神经网络(CNN)预测分子特性
- julia(6)-循环与猜数字
- twitter api 无法连接_光大银行牟健君:金融API的安全问题和应对技术
- 【HYSBZ - 1088 】扫雷Mine (简单dp)
- 为什么我做数据库类的程序要用代码生成器,而且是前前后后,反反复复 [转]...
- 小程序开发工具不显示tobar图标
- 转载:性能计数器分析
- New Adventure----GUI Design Studio
- Apache-Commons-FileIOUtils工具类常用方法使用
- sftp服务器配置管理系统,配置sftp服务器
- 用友2003年度NC_SCM项目经理/高级顾问认证考试试题及答案
- 一万年太久,只争朝夕,男儿有泪不轻弹,只是未到伤心处!!!!!!
- android 进制转换的方法
- 笨方法学python 习题29-31
- 计算机异常断电后无法启动,电脑突然断电后开不了机怎么办【解决方法】
- 下载漫画网站图片示例
- 【入门】人见人爱A+B:时间相加
- SATA2 硬盘 系统盘 显卡黑屏_黑苹果硬件选购指南主板amp;硬盘amp;WI
- 基于SpringBoot开发的物联网风电监测系统源码【源码分享】
- 事实表的分类:事务事实表,周期快照事实表,累计快照事实表