遇到了需要点击不同的条目播放不同的音频,实现下方工具类记录一下。

准备工作

添加exoplayer依赖,考虑到exoplayer可以较好的播放音视频,api简单一些。

implementation 'com.google.android.exoplayer:exoplayer:2.13.3'implementation 'androidx.lifecycle:lifecycle-runtime-ktx:2.5.1'

工具类实现

object ExoPlayer : DefaultLifecycleObserver {private var playStartedCallBack: (() -> Unit)? = nullprivate var playEndedCallBack: (() -> Unit)? = nullprivate var player: SimpleExoPlayer? = nullprivate val playerEventListener = object : Player.EventListener {override fun onPlaybackStateChanged(state: Int) {super.onPlaybackStateChanged(state)when (state) {Player.STATE_BUFFERING -> {playStartedCallBack?.invoke()}Player.STATE_ENDED -> {playEndedCallBack?.invoke()}else -> {}}}}fun play(appContext: Context,playerUrl: String,isRepeat: Boolean = false,startCallBack: (() -> Unit)? = null,endCallBack: (() -> Unit)? = null) {if (playerUrl.isBlank()) {Log.d("ExoPlayer", "play() playerUrl isBlank")return}playStartedCallBack = startCallBackplayEndedCallBack = endCallBackval musicPlayer = if (null == player) {SimpleExoPlayer.Builder(appContext).build().apply {addListener(playerEventListener)}.also {player = it}} else {player!!}musicPlayer.clearMediaItems()val mediaItem = MediaItem.fromUri(playerUrl)musicPlayer.setMediaItem(mediaItem)musicPlayer.repeatMode = if (isRepeat) {Player.REPEAT_MODE_ONE} else {Player.REPEAT_MODE_OFF}musicPlayer.prepare()musicPlayer.play()}fun isPlaying(): Boolean {return player?.isPlaying ?: false}override fun onResume(owner: LifecycleOwner) {super.onResume(owner)player?.let { musicPlayer ->if (musicPlayer.repeatMode == Player.REPEAT_MODE_ONE&& musicPlayer.playbackState == Player.STATE_READY) {musicPlayer.play()}}}override fun onPause(owner: LifecycleOwner) {super.onPause(owner)player?.pause()}override fun onDestroy(owner: LifecycleOwner) {playStartedCallBack = nullplayEndedCallBack = nullplayer?.clearMediaItems()player?.removeListener(playerEventListener)player?.release()player = nullsuper.onDestroy(owner)}
}

Exoplayer2 播放单个音频相关推荐

  1. 音频通道数、采样频率、采样位数、采样个数(样本数)的概念及计算一帧音频的大小、每秒播放的音频字节大小、一帧的播放时长、音频重采样

    对于下面data和linesize的解释(参考下面3.4中的av_samples_alloc_array_and_samples函数说明): 1)data是通道的意思,例如双通道,data[0]代表左 ...

  2. H5 自动播放背景音频,兼容安卓和苹果手机, ios createInnerAudioContext 无法自动播放解决

    原因应该是IOS不允许自动播放音频,有两种解决方法 在main.js Vue.prototype.innerAudioContext = uni.createInnerAudioContext(); ...

  3. php播放音乐视频,html5停止(暂停)当前播放的音频或视频的方法pause()

    实例 带有播放和暂停按钮的一段视频:var myVideo=document.getElementById("video1"); function playVid() { myVi ...

  4. 我的Android进阶之旅------Android MediaPlayer播放网络音频的实例--网络mp3播放器

    上一篇写了个简单的MP3播放器 ,这次写一个可以播放网络音频资源的播放器 本实例可以实现音乐播放器除了来电的时候会暂停播放,通话结束后恢复播放外,打开其他的Activity都可以继续播放音乐,享受一边 ...

  5. html的音频播放,HTML5 音频播放 audio

    众所周知,在HTML5诞生之前网页上要播放一段视频基本都是依靠flash插件,而HTML5诞生了和标签,使得在HTML5上播放视频或者音频就像显示图片那么轻松 如果我们现在不需要使用浏览器内部的aud ...

  6. iOS开发-ZFPlayer的简单使用 播放单个网络视频

    iOS开发-ZFPlayer的简单使用 播放单个网络视频 前言 开发准备 代码 注意 前言 关于ZFPlayer播放单个网络视频案例,它的网络列表视频案例在gitHub上面很多. 开发准备 podfi ...

  7. UOS 录制电脑播放的音频 / 内录音频

    Windows 里面有一个"立体声混音",可以内录电脑播放的音频,而不受到外界噪音的干扰.前段时间接到反馈说 UOS 的设置里面的音频输入里面没有可以选择的设备,这里就稍微探索了一 ...

  8. 使用servlet过滤器播放amr音频

    前话  怎样播放amr音频?这个问题让我好烦恼,在网上找了一些资料,quicktime插件虽然可以播放amr格式的音频,但是不满足项目的要求,html5也不能播放amr格式的音频.后来想到将amr音频 ...

  9. 实现在线播放Wav音频文件,支持IE和Google

    最近在弄一个在线播放Wav音频文件的功能,发现audio只支持在google浏览器下才能访问,ie是不支持的,但是ie支持embed标签的播放. getWebIE:function(){var use ...

最新文章

  1. 善待离职员工,让他们成为企业的财富
  2. SAP UI5 setModel of scFld Controller
  3. java中break标记的使用
  4. 76. Minimum Window Substring
  5. iQOO Neo6入网:骁龙8旗舰平台+80W快充
  6. java split空值也保留_Java内存大家都知道,但你知道要怎么管理Java内存吗?
  7. Scikit-learn数据变换
  8. Xcode9 新功能
  9. 《隐秘的角落》:发生在IDC机房的隐秘事件
  10. 云计算示范项目_“云计算和大数据”重点专项2018年度项目申报指南
  11. 02 华为交换机配置telnet远程登录
  12. python声音报警_python:基于tkinter打造的股票实时监控声音报警器! 自动监控,声音警报...
  13. python逆时针画圆_python 逆时针
  14. 一个不常用的DOM原生API,closest
  15. 中国不是不能开发出自己的浏览器,而是没必要
  16. 浏览器提示正在下载代理脚本问题解决
  17. Linux游戏市场,Tacoma上的Nixie Pixel以及更多开放游戏新闻
  18. vue学习(1)vue3/2下的 父子/爷孙组件间方法调用
  19. IE 10 SCRIPT5022: InvalidCharacterError错误解决办法
  20. MySQL专题四——MySQL函数(聚合函数)

热门文章

  1. 转载:mac下开启hidpi三种办法
  2. 微信去年共拦截谣言8.4万多条 这几个都是谣言
  3. jpi多表联查_MyBatis多表间级联查询
  4. Transact-SQL编程
  5. Lazada(来赞达):就三个步骤!搞定Lazada店铺装修
  6. 网站地图(sitemap)如何优雅生成?
  7. Frida Hook Android App 进阶用法之 Java 运行时
  8. 由一个误操作引起的对linux下mv命令的使用总结
  9. 【2022 网鼎杯】青龙组 crypto WriteUp
  10. win10 更新之后使用win+s 或者 win+Q 出现新闻推荐和热门搜索