安卓开发,目前需要实现一个在安卓5.0系统下实现变速播放的功能。我们知道安卓播放器mediaPlayer实现变速播放功能的API是在安卓系统6.0以上推出的,所以在安卓5.0系统,安卓源码是没有实现变速播放的API,如果我们开发的时候,没有对系统进行判断,在6.0以上安卓系统开发出来的变速播放功能,安装到5.0系统时,调用没有的系统API,程序是会直接崩溃的。通过查看官网,我们了解到android官网的ExoPlayer所以我们有了如下解决方案:

// 设置音乐播放速度
public static void changeplayerSpeed(float speed) { if (mPlayer == null)  {return; }if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { // API 23 (6.0)以上 ,通过设置Speed改变音乐的播放速率if (mPlayer.isPlaying()) {// 判断是否正在播放,未播放时,要在设置Speed后,暂停音乐播放mPlayer.setPlaybackParams(mPlayer.getPlaybackParams().setSpeed(speed)); } else {mPlayer.setPlaybackParams(mPlayer.getPlaybackParams().setSpeed(speed)); mPlayer.pause(); } } else {// 在Android6.0以前,需要另想办法处理,后续查到好的方法再补充}
}

那么问题来了:在安卓5.0系统,我们该如何实现变速播放的功能呢?
Google为了适配低版本推出了ExoPlayer播放器
具体如何使用网络上也有不少很好的教程:ExoPlayer简单使用。这里的变速播放具体实现代码如下:

 override fun setPlaySpeed(speed: Float) {val playbackParameters = PlaybackParameters(speed)player?.playbackParameters = playbackParameters}

如果需要实现一个播放器功能,我们可以抽取出一个播放器的接口,然后通过实现这个接口的方法来统一包装成一个播放器,接口如下:

/*** 播放器包装接口* @author guotianhui*/
public interface IPlayerWapper {void prepareDataSource(String mediaSourece);void setPlaySpeed(float speed);void startPlay();void pause();void stop();void resumePlay();boolean isPlaying();long getPlayerPosition();void seekToPlayerPosition(long progress);void releasePlayer();
}

然后我们首先只要在App的build.grade文件里面配置如下代码:

 implementation 'com.google.android.exoplayer:exoplayer-core:2.9.6'

因为我们只是需要实现变速播放功能,所以只需要导入核心代码包就行。
播放器具体实现代码如下:

/*** 兼容安卓6.0以下系统的Exoplayer* @author guotianhui*/
class DifferentSpeedPlayer: IPlayerWapper {private var player: ExoPlayer? = nullprivate constructor()companion object {private var INSTANCE: DifferentSpeedPlayer? = nullfun getSpeedPlayerInstance(): DifferentSpeedPlayer? {if(INSTANCE == null){synchronized(DifferentSpeedPlayer::class.java){if(INSTANCE == null){INSTANCE = DifferentSpeedPlayer()}}}return INSTANCE}}override fun initPlayer(context: Context) {if (player == null) {player = ExoPlayerFactory.newSimpleInstance(context, DefaultRenderersFactory(context),DefaultTrackSelector(), DefaultLoadControl())}}override fun prepareDataSource(mediaPath: String?,sourceDuration: Long) {if(ObjectUtils.isNotEmpty(mediaPath)) {val uri = Uri.parse(mediaPath)val mediaSource = buildMediaSource(uri,sourceDuration)player?.prepare(mediaSource, false, true)}}private fun buildMediaSource(uri: Uri,sourceDuration: Long): MediaSource {val sourceFactory = DefaultHttpDataSourceFactory("exoplayer-codelab")val mediaSource = ExtractorMediaSource.Factory(sourceFactory)val createMediaSource = mediaSource.createMediaSource(uri)createMediaSource.onSourceInfoRefreshed(sourceDuration,true)return createMediaSource}override fun setPlaySpeed(speed: Float) {val playbackParameters = PlaybackParameters(speed)player?.playbackParameters = playbackParameters}override fun startPlay() {player?.playWhenReady = trueLog.e(">>>>>>>>>>>>>>","    player?.duration:"+    player?.duration)}override fun pause() {player?.playWhenReady = false}override fun resumePlay() {}override fun stop() {player?.playWhenReady = false}override fun isPlaying(): Boolean {return if(ObjectUtils.isNotEmpty(player)) {player?.isPlayingAd!!}else{false}}override fun isResumePlaying(): Boolean {return false}override fun getPlayerPosition(): Long {return (player?.contentPosition!! /1000)}override fun seekToPlayerPosition(progress: Long) {player?.seekTo(progress * 1000)}override fun releasePlayer() {if (player != null) {player?.release()player = null}}
}

查看Api发现,播放器的时间获取返回的都是毫秒值,需要自己除以1000得到的正确的播放时间。ExoPlayer的开源官网

安卓系统实现播放器变速功能相关推荐

  1. Android开源音乐播放器之播放器基本功能

    系列文章 Android开源在线音乐播放器--波尼音乐 Android开源音乐播放器之播放器基本功能 Android开源音乐播放器之高仿云音乐黑胶唱片 Android开源音乐播放器之自动滚动歌词 An ...

  2. android 无损播放器,山灵公布M6 Pro 安卓无损音乐播放器:骁龙430+4GB内存

    IT之家3月18日消息  今天,山灵在微博中公布了M6 Pro 安卓无损音乐播放器,搭载骁龙 430 CPU和4GB内存,全新屏内R角,AG磨砂钢化玻璃,AK4497EQ DAC *2解码芯片,价格尚 ...

  3. 会议平板安卓系统下不能使用视频会议功能?要选配摄像头麦克风?

    会议平板在安卓系统下能否使用视频会议功能?需选配外置摄像头等配件?视频会议软件与会议平板是否兼容?怎么使用操作视频会议,怎样异地白板同步协同? 皓丽智能会议平板搭载远程会议视频系统,普通网络下可同步无 ...

  4. 安卓版蝌蚪播放器客户端应用源码完整版

    安卓版蝌蚪播放器客户端应用源码完整版 V1.2,第一次进入,如果提示获取数据失败,请退出再进试试.请保证手机有网络,还有模拟器播放不了视频,需要sdk2.3即以上.本人测试环境:2.3sdk,分辨率: ...

  5. 弹幕播放器php代码,苹果CMSV10弹幕播放器 记忆功能+m3u8+MP4.zip

    [实例简介]支持自动下一集 带记忆播放 弹幕等简单的功能 播放器只支持m3u8和MP4视频链接播放有效,其他格式的没有添加组件,会玩的可以自己二次修改开发 [实例截图] [核心代码] MacPlaye ...

  6. 安卓学习期末大作业——音乐播放器基础功能

    步骤 系列文章 前言 1.实现效果 2.关于自动切到后台 3.给予权限访问本地音乐,如果本地指定文件夹没有音乐会无法运行 4.注意配置jdk11 下载资源 总结 系列文章 提示:转到安卓学习专栏,观看 ...

  7. android 4.4 hifi,海贝(HiBy)R5安卓高解析无损播放器 4.4平衡随身听便携HIFI 双向蓝牙 铝合金黑色...

    海贝音乐之前一直在致力于打通手机与高品质DAP之间的隔阂,使手机也可以作为高品质的音源转盘参与到随身Hi-Fi系统之中来.他们的更新款硬件产品HiBy R5也利用优势采用了安卓系统,配合骁龙425作为 ...

  8. 【基于Ijkplayer】安卓机顶盒电视播放器开发

    前言 Ijkplayer是B站开源的一款多媒体播放引擎,其基于ffmpeg开并支持很多的在线媒体播放格式.本文实现了在安卓TV上播放各大电视台的直播,其格式是.m3u8.当然了只要是编译的Ijkpla ...

  9. [转]全方位对比 安卓手机音乐播放器推荐

    现在手机应用发展迅速,各种只怕想不到,不怕做不到的应用也是如雨后春笋般应运而生.听歌早已经告别了以前庞大.笨拙.不便带来的烦恼,之后mp3播放器的普及更是随处都可见戴着耳机听歌的人.而手机近几年来革命 ...

  10. android图片本地播放器下载,安卓音乐照片播放器

    音乐照片播放器app是一个给力的图像工具,可以提供非常好用的幻灯片播放功能,同时还有超级享受的相册图库应用功能,音乐照片播放器app在西西软件园下载之后,你绝对不会后悔的. 功能介绍 用户通过软件可以 ...

最新文章

  1. 数据中心机房供电需求有哪些?存在哪些电能质量问题?
  2. Java中的锁的概念大汇总
  3. 算术运算符_加号的多种用法
  4. java log.error_Logger.error打印错误异常的详细堆栈信息
  5. Linux-ubuntu18.04 终端命令ping,ssh
  6. Go Web:HttpRouter路由
  7. 萌新的Python练习实例100例(二)根据企业的利润,计算企业的方法奖金
  8. 查询系统是使用 MBR 还是 GPT 分区 (Windows 和 Linux)
  9. 18_多易教育之《yiee数据运营系统》用户画像-事实标签计算篇
  10. logback日志配置教程
  11. 计算机技能高考带什么文具,高考必备——21条考场抓分细节
  12. 沈向洋:为何读论文这么难?
  13. 【02】Java进阶:09-冒泡排序、选择排序、二分查找、异常、异常的产生和处理、自定义异常、多线程
  14. 深度学习-核对矩阵维度
  15. 智慧工地安全施工实时监测系统解决方案
  16. 不了解服务器的同学快看过来!详细介绍服务器的种类、特性与作用
  17. 【教程、无技术含量】简单的油猴脚本编写教程
  18. Leek' music diary 1
  19. 十二核能让联发科引爆核弹战吗?
  20. Vue中一些需要注意的点(采坑)

热门文章

  1. js从服务器获取word文档,JavaScript-js如何获取word文档页数
  2. 如何选择适合你的兴趣爱好(十七),吉他
  3. Java服务端支付宝对接(详细)
  4. 苹果手机怎样双开微信?简单2步快速安装苹果版双开助手!
  5. 2020switch电信最快的dns_《2020switch电信最快的dns》电影_2020switch电信最快的dns正片免费观看-深圳市创业发科技有限公司...
  6. 数字温湿度传感器DHT11模块
  7. 博弈论中SG函数的解释与运用
  8. 基金交易席位的制度沿袭
  9. 交易所交易规则和费用计算
  10. R 实现层次分析法确定指标权重