这篇文章来讲讲exoplayer注册的部分监听事件的作用(如果讲解有误,请在评论区留言令作者改正)

  1. setPlaybackPreparer()
    这个的使用方法是:PlayerView.setPlaybackPreparer()
player_view.setPlaybackPreparer(this)override fun preparePlayback() {//当视频无法播放时,用户继续点击播放按钮,调用此方法showToast("视频已损坏")}
  1. 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

  1. 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)相关推荐

  1. Cocos 发射和监听事件 事件派送(TypeScript)

    监听和发射事件 监听事件 事件处理是在节点(cc.Node)中完成的.对于组件,可以通过访问节点 this.node 来注册和监听事件. 事件监听函数 on 可以传第三个参数 target,用于绑定响 ...

  2. 常用的监听事件(android)

    刚发布过Toast,为了是自己记得牢固一些在这里写几个监听事件 分别写出不同位置的Toast 监听常用的有四种 第一种:内部类作为事件监听器类 xml中代码 <RelativeLayout xm ...

  3. 【冷知识】获取网页所有的监听事件类型、方法。请认准getEventListeners

    获取事件列表 getEventListeners(window)//获取window绑定的所有监听事件列表//----------------------------------------getEv ...

  4. android 常用的监听器,Android中的Keyboard监听事件

    前言 有关Keyboard监听事件,无非就是以下这几种情况: 1,操作显示或隐藏键盘: 2,判断当前键盘的状态: 3,键盘显示或隐藏后的拦截处理: 只要有使用到EditText,避免不了肯定会遇到以上 ...

  5. python hook技术,python hook监听事件详解

    本文实例为大家分享了python hook监听事件的具体代码,供大家参考,具体内容如下 # -*- coding: utf-8 -*- # # by oldj http://oldj.net/ # i ...

  6. 安卓开发学习日记 DAY5——监听事件onClick的实现方法

    今天主要学习了监听事件的是实现方法,就是说,做了某些动作后,怎么监听这个动作并作出相应反应. 方法主要有三种: 1.匿名内部类的方法 2.独立类的方法 3.类似实现接口的方法 以下分别分析: 1.匿名 ...

  7. Python+selenium 自动化-调用dom节点的click()监听事件,强力操作节点,穿透元素进行点击,节点被遮挡不可点击解决方法

    非常简单!只需要两步: 第一步,我先获取 dom 节点. 第二步,然后通过 driver.execute_script() 方法调用 dom 节点的 click() 监听事件. a = driver. ...

  8. chrome 技巧篇-如何查看web元素绑定的监听事件

    第一步:首先通过 F12 进入开发者工具页面. 第二步:选中 Elements 页签内对应的元素,可以用一个按钮来试一试. 第三步:右边选择 Event Listeners 页签,并取消勾选 Ance ...

  9. electron ipcRenderer渲染进程发送事件, ipcMain主进程监听事件

    ipcMain 从主进程到渲染进程的异步通信.它处理从渲染器进程(网页)发送出来的异步和同步信息. 从渲染器进程发送的消息到主进程的异步通信. 主进程: import { app, BrowserWi ...

  10. 拓展编辑器(五)_监听事件

    监听事件 这个是拓展Project视图的最后一节,这里将会介绍一下如何借助程序来约束project视图中的资源.例如用程序来判断资源的原始位置以及将要移动的位置是否合法,从而决定是否能阻止本次移动.U ...

最新文章

  1. SVO: 视觉SLAM中特征点法与直接法结合
  2. RESTful编程究竟是什么?
  3. 电脑电池修复_笔记本电脑不充电是怎么回事?
  4. 【洛谷】马的遍历--广度优先搜索(BFS)
  5. VTK:图片之ImageDivergence
  6. Spark _08窄依赖和宽依赖stage
  7. oracle 11g r2版本号,Oracle 11g r2新增版本功能(二)
  8. init_cheap: VirtualAlloc pointer is null, Win32 error 487
  9. 魔鬼的梦魇—验证IE中的js内存泄露模式(三)
  10. javascript 复选框(checkbox)全选/全不选/反选
  11. 缓和曲线计算方式实现,全站仪中道路数据计算
  12. ArcGIS:矢量、栅格文件裁剪(批量处理)
  13. JDK11占比第一?
  14. @ select 函数使用说明
  15. 网络的形成-从原始部落到现代化世界
  16. RMAN备份恢复性能优化--MAXSETSIZE, MAXPIECESIZE, FILESPERSET, SECTION SIZE等
  17. excel怎么设置打印区域_Excel数据太多,无法完整打印在一张纸上?你这样设置即可搞定...
  18. PAT A1010 Radix题解
  19. 使用 Bud and Go 构建全栈应用程序
  20. MyBatis逆向工程去除表名前缀

热门文章

  1. python批量打印mathcad_全能批量打印工具-兼容所有打印机
  2. Oracle 数据库限制IP地址连接
  3. J2me实现的wap浏览器
  4. C# 串口驱动封装成类库
  5. Linux环境安装之Ant
  6. java 实现QQ自动登录(带验证码)
  7. 不加群提取群成员深度体会,少走点儿弯路吧
  8. HTML表格表单案例
  9. 计算机键盘快速指南,菜鸟必看 Windows键盘快捷键入门指南
  10. 傅里叶变换及其实现(MATLAB)