基于ExoPlayer的ExoVideoView
前言
本人之前写过一篇名为基于ExoPlayer的ExoPlayerVideoView的文章,近日发现竟然被盗用了。
今日再次发布本文是因为ExoVideoView
升级啦,新版的更好用,支持更多功能,支持自定义controller。
特性
1.自动处理音频焦点。 2.根据传感器自动处理方向。 3.手势支持。 4.多清晰度选择支持。 5.为控制器添加自定义布局. 6.调整显示大小。 7.自定义controller。
使用 ExoVideoView
1.依赖
最简单的方式是加入gradle依赖。请确认在工程的build.gradle中添加了JCenter和google()。
repositories { jcenter() google() }
然后在你的项目中添加如下代码:
implementation 'com.jarvanmo:exoplayerview:2.0.8'
2.在xml中定义
在xml中使用 ExoVideoView:
<com.jarvanmo.exoplayerview.ui.ExoVideoView android:id="@+id/videoView" android:layout_width="match_parent" android:layout_height="300dp"/>
3.在java代码中
ExoVideoView 提供了内建Player
:
SimpleMediaSource mediaSource = new SimpleMediaSource(url);//也支持uri videoView.play(mediaSource); videoView.play(mediaSource,where);//play from a particular position
也可以使用自义的Player:
videoView.setPlayer(player);
提示:不要忘记释放ExoPlayer:
videoView.releasePlayer();
详情请移步demo.
3.方向管理
ExoVideoView 可以自动处理方向问题,前提是为ExoVideoView设置一个OrientationListener:
videoView.setOrientationListener(orientation -> { if (orientation == SENSOR_PORTRAIT) { //do something } else if (orientation == SENSOR_LANDSCAPE) { //do something } });
提示:当ExoVideoView自动处理方向问题时,如果在Controller中的context是Activity,那么系统会调用activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE)
or activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT);
全屏事件处理也是如此。
4返回管理
首先,重写onKeyDown:
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK) { return videoView.onKeyDown(keyCode, event); } return super.onKeyDown(keyCode, event); }
为ExoVideoView设置监听:
videoView.setBackListener((view, isPortrait) -> { if (isPortrait) { //do something } return false; });
如果返回值是 true
, 系统后续动作会被中断.否则,ExoVideoView会自动处理方向,并且会回调OrientationLister.onOrientationChange()
.
高级
1.多清清晰度
ExoVideoView 内置清晰度选择器.如果开启发多清晰度并添加了多清晰度,内置清晰度选择器将被加入overlayFrameLayout
.
List<ExoMediaSource.Quality> qualities = new ArrayList<>(); ExoMediaSource.Quality quality =new SimpleQuality(quality,mediaSource.url()); qualities.add(quality); mediaSource.setQualities(qualities);
2.Controller显示模式
ExoVideoPlaybackController
被分为四个部分:
1.Top 2.Top Landscape 3.Bottom 4.Bottom Landscape
每一部分都可以被显示或隐藏:
app:controller_display_mode="all|none|top|top_landscape|bottom|bottom_landscape"
在java中:
videoView.setControllerDisplayMode(mode);
3.为controller添加控件
ExoVideoPlaybackController
允许在java代码中添加控件.
videoView.addCustomView(ExoVideoPlaybackControlView.CUSTOM_VIEW_TOP, view); videoView.addCustomView(ExoVideoPlaybackControlView.CUSTOM_VIEW_TOP_LANDSCAPE, view); videoView.addCustomView(ExoVideoPlaybackControlView.CUSTOM_VIEW_BOTTOM_LANDSCAPE, view);
4.使用自定义controller布局
exo_video_playback_control_view.xml
是允许自定义的。其中一些属性在ExoVideoPlaybackControlView
有定义。具体可看源码。
app:controller_layout_id="@layout/my_controller"
其他
app:controller_background="@android:color/holo_orange_dark" app:use_artwork="true" app:default_artwork="@drawable/default_art"
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
python-面向对象(绑定方法与非绑定方法)
一、绑定方法: 绑定给谁就应该由谁来调用,谁来调用就会将谁当做第一个参数传入 1.绑定给对象的方法:类中定义的函数默认就是绑定给对象的 2.绑定给类的方法:为类中定义的函数加上一个装饰器classmethod 二、非绑定方法: 即不与类绑定,又不与对象绑定,意味着对象和类都可以来调用,无论谁来调用都是一个普通函数,没有自动传值的效果 import settings class Mysql: def __init__(self,ip,port): self.ip = ip self.port = port self.id =self.create_id() def tell_info(self): print('id:%s,ip:%s port:%s'%(self.id,self.ip,self.port)) @classmethod def from_conf(cls): return cls(settings.ip,settings.port)#clx(ip,port) @staticmethod def create_id(): import uuid return uuid.uu...
- 下一篇
JDK自带监控工具
该篇文章,主要是工具普及,告诉大家有这么两款工具,可帮助我们进行JVM调优,及时看到JVM的变化。 不过建议,最好还是对于JVM相关的知识点,有一定的基础和熟悉。 JDK自带jconsole.exe和jvisualvm.exe这两款JVM分析工具。就跟平时打开eclipse.exe文件一样,双击即可 1.jconsole.exe进去后,如图: 内存: 线程: 类: 概要: MBean 2.java VisualVm 总的来说,这两款工具,使用方式基本没有什么区别,都能帮助你用于JVM分析。
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Red5直播服务器,属于Java语言的直播服务器
- CentOS7,CentOS8安装Elasticsearch6.8.6
- Docker安装Oracle12C,快速搭建Oracle学习环境
- CentOS8编译安装MySQL8.0.19
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- CentOS6,CentOS7官方镜像安装Oracle11G
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- CentOS8安装Docker,最新的服务器搭配容器使用