Exoplayer2 播放单个音频
遇到了需要点击不同的条目播放不同的音频,实现下方工具类记录一下。
准备工作
添加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 播放单个音频相关推荐
- 音频通道数、采样频率、采样位数、采样个数(样本数)的概念及计算一帧音频的大小、每秒播放的音频字节大小、一帧的播放时长、音频重采样
对于下面data和linesize的解释(参考下面3.4中的av_samples_alloc_array_and_samples函数说明): 1)data是通道的意思,例如双通道,data[0]代表左 ...
- H5 自动播放背景音频,兼容安卓和苹果手机, ios createInnerAudioContext 无法自动播放解决
原因应该是IOS不允许自动播放音频,有两种解决方法 在main.js Vue.prototype.innerAudioContext = uni.createInnerAudioContext(); ...
- php播放音乐视频,html5停止(暂停)当前播放的音频或视频的方法pause()
实例 带有播放和暂停按钮的一段视频:var myVideo=document.getElementById("video1"); function playVid() { myVi ...
- 我的Android进阶之旅------Android MediaPlayer播放网络音频的实例--网络mp3播放器
上一篇写了个简单的MP3播放器 ,这次写一个可以播放网络音频资源的播放器 本实例可以实现音乐播放器除了来电的时候会暂停播放,通话结束后恢复播放外,打开其他的Activity都可以继续播放音乐,享受一边 ...
- html的音频播放,HTML5 音频播放 audio
众所周知,在HTML5诞生之前网页上要播放一段视频基本都是依靠flash插件,而HTML5诞生了和标签,使得在HTML5上播放视频或者音频就像显示图片那么轻松 如果我们现在不需要使用浏览器内部的aud ...
- iOS开发-ZFPlayer的简单使用 播放单个网络视频
iOS开发-ZFPlayer的简单使用 播放单个网络视频 前言 开发准备 代码 注意 前言 关于ZFPlayer播放单个网络视频案例,它的网络列表视频案例在gitHub上面很多. 开发准备 podfi ...
- UOS 录制电脑播放的音频 / 内录音频
Windows 里面有一个"立体声混音",可以内录电脑播放的音频,而不受到外界噪音的干扰.前段时间接到反馈说 UOS 的设置里面的音频输入里面没有可以选择的设备,这里就稍微探索了一 ...
- 使用servlet过滤器播放amr音频
前话 怎样播放amr音频?这个问题让我好烦恼,在网上找了一些资料,quicktime插件虽然可以播放amr格式的音频,但是不满足项目的要求,html5也不能播放amr格式的音频.后来想到将amr音频 ...
- 实现在线播放Wav音频文件,支持IE和Google
最近在弄一个在线播放Wav音频文件的功能,发现audio只支持在google浏览器下才能访问,ie是不支持的,但是ie支持embed标签的播放. getWebIE:function(){var use ...
最新文章
- 善待离职员工,让他们成为企业的财富
- SAP UI5 setModel of scFld Controller
- java中break标记的使用
- 76. Minimum Window Substring
- iQOO Neo6入网:骁龙8旗舰平台+80W快充
- java split空值也保留_Java内存大家都知道,但你知道要怎么管理Java内存吗?
- Scikit-learn数据变换
- Xcode9 新功能
- 《隐秘的角落》:发生在IDC机房的隐秘事件
- 云计算示范项目_“云计算和大数据”重点专项2018年度项目申报指南
- 02 华为交换机配置telnet远程登录
- python声音报警_python:基于tkinter打造的股票实时监控声音报警器! 自动监控,声音警报...
- python逆时针画圆_python 逆时针
- 一个不常用的DOM原生API,closest
- 中国不是不能开发出自己的浏览器,而是没必要
- 浏览器提示正在下载代理脚本问题解决
- Linux游戏市场,Tacoma上的Nixie Pixel以及更多开放游戏新闻
- vue学习(1)vue3/2下的 父子/爷孙组件间方法调用
- IE 10 SCRIPT5022: InvalidCharacterError错误解决办法
- MySQL专题四——MySQL函数(聚合函数)