ExoPlayer的监听事件(Kotlin)
这篇文章来讲讲exoplayer注册的部分监听事件的作用(如果讲解有误,请在评论区留言令作者改正)
- setPlaybackPreparer()
这个的使用方法是:PlayerView.setPlaybackPreparer()
player_view.setPlaybackPreparer(this)override fun preparePlayback() {//当视频无法播放时,用户继续点击播放按钮,调用此方法showToast("视频已损坏")}
- setErrorMessageProvider()
这个的使用方法是:PlayerView.setErrorMessageProvider()
player_view.setErrorMessageProvider(PlayerErrorMessageProvider())private class PlayerErrorMessageProvider : ErrorMessageProvider<ExoPlaybackException> {override fun getErrorMessage(e: ExoPlaybackException): Pair<Int, String> {if (e.type == ExoPlaybackException.TYPE_RENDERER) {println("渲染出了问题")}//在视频中展示错误提示return Pair.create(0, "视频播放出了问题")}}
在return 中会将"视频播放出了问题"显示在播放器中,效果如下:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200525204309583.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG
- SimpleExoPlayer.addListener()
用处都写在了代码的注释里;
//监听播放状态以及失败原因
player!!.addListener(this)//播放状态监听override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) {when (playbackState) {Player.STATE_IDLE -> {//播放器没有可播放的媒体。showToast("播放器没有可播放的媒体")}Player.STATE_BUFFERING -> {//播放器无法立即从当前位置开始播放。这种状态通常需要加载更多数据时发生。showToast("正在加载数据")}Player.STATE_READY -> {// 播放器可以立即从当前位置开始播放。如果{@link#getPlayWhenReady()}为true,否则暂停。//当点击暂停或者播放时都会调用此方法//当跳转进度时,进度加载完成后调用此方法showToast("播放器可以立即从当前位置开始")}Player.STATE_ENDED -> {//播放器完成了播放showToast("视频结束了噢")}}}override fun onPlayerError(error: ExoPlaybackException) {if (error.type == ExoPlaybackException.TYPE_SOURCE) {val cause: IOException = error.sourceException//判断是否为播放资源出错if (cause is HttpDataSource.HttpDataSourceException) {val httpError: HttpDataSource.HttpDataSourceException = causeval dataSpec = httpError.dataSpecif (httpError is HttpDataSource.InvalidResponseCodeException) {//强制转换为InvalidResponseCodeException并检索返回的信息,响应头//就是说,当拿Uri去准备播放时,如果Uri缺少Http/Https开头等情况,就会在这里接收到异常println("1错误 " + httpError.responseMessage)println("1错误 " + httpError.headerFields)} else {//尝试httpError.getCause()检索根本原因,请注意它可能为空println("2错误 " + httpError.cause)}}}println("xxxxxxxxxx 发生播放异常")}//轨道改变监听override fun onTracksChanged(trackGroups: TrackGroupArray,trackSelections: TrackSelectionArray) {//这里轨道发生改变的情况,一播放视频就会调用,暂未摸清println("轨道发生了改变")}
4.setControllerVisibilityListener()
player_view.setControllerVisibilityListener(this)override fun onVisibilityChange(visibility: Int) {//当你点击视频时,视频的控制器(即播放按钮,快进按钮等)被显示/隐藏时,调用此方法println("xxxxx onVisibilityChange")}
暂时测试到这么多,更多的用法还没测试到,以后摸索了解到更多时将回来更新这篇文章;
ExoPlayer的监听事件(Kotlin)相关推荐
- Cocos 发射和监听事件 事件派送(TypeScript)
监听和发射事件 监听事件 事件处理是在节点(cc.Node)中完成的.对于组件,可以通过访问节点 this.node 来注册和监听事件. 事件监听函数 on 可以传第三个参数 target,用于绑定响 ...
- 常用的监听事件(android)
刚发布过Toast,为了是自己记得牢固一些在这里写几个监听事件 分别写出不同位置的Toast 监听常用的有四种 第一种:内部类作为事件监听器类 xml中代码 <RelativeLayout xm ...
- 【冷知识】获取网页所有的监听事件类型、方法。请认准getEventListeners
获取事件列表 getEventListeners(window)//获取window绑定的所有监听事件列表//----------------------------------------getEv ...
- android 常用的监听器,Android中的Keyboard监听事件
前言 有关Keyboard监听事件,无非就是以下这几种情况: 1,操作显示或隐藏键盘: 2,判断当前键盘的状态: 3,键盘显示或隐藏后的拦截处理: 只要有使用到EditText,避免不了肯定会遇到以上 ...
- python hook技术,python hook监听事件详解
本文实例为大家分享了python hook监听事件的具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- # # by oldj http://oldj.net/ # i ...
- 安卓开发学习日记 DAY5——监听事件onClick的实现方法
今天主要学习了监听事件的是实现方法,就是说,做了某些动作后,怎么监听这个动作并作出相应反应. 方法主要有三种: 1.匿名内部类的方法 2.独立类的方法 3.类似实现接口的方法 以下分别分析: 1.匿名 ...
- Python+selenium 自动化-调用dom节点的click()监听事件,强力操作节点,穿透元素进行点击,节点被遮挡不可点击解决方法
非常简单!只需要两步: 第一步,我先获取 dom 节点. 第二步,然后通过 driver.execute_script() 方法调用 dom 节点的 click() 监听事件. a = driver. ...
- chrome 技巧篇-如何查看web元素绑定的监听事件
第一步:首先通过 F12 进入开发者工具页面. 第二步:选中 Elements 页签内对应的元素,可以用一个按钮来试一试. 第三步:右边选择 Event Listeners 页签,并取消勾选 Ance ...
- electron ipcRenderer渲染进程发送事件, ipcMain主进程监听事件
ipcMain 从主进程到渲染进程的异步通信.它处理从渲染器进程(网页)发送出来的异步和同步信息. 从渲染器进程发送的消息到主进程的异步通信. 主进程: import { app, BrowserWi ...
- 拓展编辑器(五)_监听事件
监听事件 这个是拓展Project视图的最后一节,这里将会介绍一下如何借助程序来约束project视图中的资源.例如用程序来判断资源的原始位置以及将要移动的位置是否合法,从而决定是否能阻止本次移动.U ...
最新文章
- SVO: 视觉SLAM中特征点法与直接法结合
- RESTful编程究竟是什么?
- 电脑电池修复_笔记本电脑不充电是怎么回事?
- 【洛谷】马的遍历--广度优先搜索(BFS)
- VTK:图片之ImageDivergence
- Spark _08窄依赖和宽依赖stage
- oracle 11g r2版本号,Oracle 11g r2新增版本功能(二)
- init_cheap: VirtualAlloc pointer is null, Win32 error 487
- 魔鬼的梦魇—验证IE中的js内存泄露模式(三)
- javascript 复选框(checkbox)全选/全不选/反选
- 缓和曲线计算方式实现,全站仪中道路数据计算
- ArcGIS:矢量、栅格文件裁剪(批量处理)
- JDK11占比第一?
- @ select 函数使用说明
- 网络的形成-从原始部落到现代化世界
- RMAN备份恢复性能优化--MAXSETSIZE, MAXPIECESIZE, FILESPERSET, SECTION SIZE等
- excel怎么设置打印区域_Excel数据太多,无法完整打印在一张纸上?你这样设置即可搞定...
- PAT A1010 Radix题解
- 使用 Bud and Go 构建全栈应用程序
- MyBatis逆向工程去除表名前缀