写在前面

在Android设备中,播放视频和音乐是非常普遍的。Android框架提供了一个对于媒体的操作的最省代码的解决方案:MediaPlayer。它提供了低等级的媒体API,例如:MediaCodec,AudioTrack,MediaDrm,可以用于建立自定义媒体播放的解决方案。
但是MediaPlayer的api实在是但太难用了,扩展性也不好。所以我们可以用诸如ijkplayer,VLC以及ExoPlayer。本文并不是讲述ExoPlayer如何使用的,而是一款基于ExoPlayer的VideoView。ExoPlayerVideoView旨在提供一个快捷的视频播放布局的解决方案。

概览

亮度调节

控制器

快进快退

横屏

竖屏

音量

开始

ExoPlayerView 是一个基于ExoPlayer的视频播放器,并且做了很多封装。
ExoPlayerView是在实际工作中的产物,可能并无法完全满足各位的实际工作中的要求,但可以借鉴下。

特性
1.提供了4种视频适应模式:
fit , fit_width , fit_height 和 none。
2.自动处理音频焦点问题。
3.可以根据传感器自动处理视频方向问题。
4.支持简单的手势操作,如快进快退,调节音量。
用法

导入

build.gradle 中加入

compile 'com.jarvanmo:exoplayerview:1.0.0'

ExoPlayerView 可以直接播放如mp4,m3u8 等简单视频,可以用于直播.
在布局文件中引入 ExoVideoView:

<com.jarvanmo.exoplayerview.ui.ExoVideoViewandroid:id="@+id/videoView"android:layout_width="match_parent"android:layout_height="300dp"app:useController="true"app:resizeMode="none"app:orientationAuto="true"/>

Play
播放一个视频:

   videoView.play(mediaSource);

如果你直接调用了上面的方法,ExoVideoView可以自动创建ExoPlayer.
当然了, 你也可以自己创建ExoPlayer;

    videoView.setPlayer(player);

也可以从指定位置播放:

   videoView.play(mediaSource,where);

注意:不要忘记释放ExoPlayer:

videoView.releaseSelfPlayer();

可以通过如下方式为视频设置一个显示名称:

 mediaSource.setDisplayName("LuYu YouYue");

或者

 videoView.setDisplayName("LuYu YouYue");

管理ExoVideoView方向

如果你为ExoVideoView设置了一个非空OrientationListener,ExoVideoView可以通过感器自动
变换方向。

      videoView.setOrientationListener(new ExoVideoPlaybackControlView.OrientationListener() {@Overridepublic void onOrientationChange(@ExoVideoPlaybackControlView.SensorOrientationType int orientation) {if(orientation == SENSOR_PORTRAIT){changeToPortrait();}else if(orientation == SENSOR_LANDSCAPE){changeToLandscape();}}});

只有当在controller中的context是Activity的时候,ExoVideoView才会调用:activity.setRequestedOrientation()
全屏按钮也是如此。
也可以通过如下方式更改ExoVideoView方向:

videoView.toggleControllerOrientation();

或者

videoView.setPortrait(true);

处理返回事件

在activity:

@Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {if(event.getKeyCode() == KeyEvent.KEYCODE_BACK){if(videoView.isPortrait()){finish();return false;}else {videoView.toggleControllerOrientation();return true;}}return super.onKeyDown(keyCode, event);}

当 controller 中的返回键钮被点击了:

        videoView.setBackListener(new ExoVideoPlaybackControlView.ExoClickListener() {@Overridepublic boolean onClick(View view, boolean isPortrait) {if(isPortrait){finish();}return false;}});

如果 onClick() 返回了true,它会拦截controller中的事件.如果返回的是false 并且你设置了一个非空的OrientationListener,
ExoVideoView 如果处于横屏,ExoVideoView将尝试变回竖屏并调用OrientationLister.onOrientationChange()

Others

你也可以在横屏的时候加入一个自定义布局:

       videoView.addViewToControllerWhenLandscape(view);

你添加的布局将被加入FrameLayout中.

提示

永远不要忘记去释放ExoPlayer.

 videoView.releaseSelfPlayer();

or

player.release();

ExoVideoView 也支持手势操作, 比如说左滑调亮度,右滑调音量,也可以快近或后退。

app目录下是demo。

ExoPlayerVideoView传送门,欢迎star。

基于ExoPlayer的ExoPlayerVideoView相关推荐

  1. exoplayer 纯java_基于ExoPlayer的ExoVideoView

    简书备份 前言 本人之前写过一篇名为基于ExoPlayer的ExoPlayerVideoView的文章,近日发现竟然被盗用了. 今日再次发布本文是因为ExoVideoView升级啦,新版的更好用,支持 ...

  2. ijk基于exo_基于 ExoPlayer 的 ExoVideoView

    写在前面 在Android设备中,播放视频和音乐是非常普遍的.Android框架提供了一个对于媒体的操作的最省代码的解决方案:MediaPlayer.它提供了低等级的媒体API,例如:MediaCod ...

  3. 一款基于ExoPlayer的自定义播放器(已开源)

    一.基于ExoPlayer 自定义播放器 JPlayer支持功能: 1 ExoUserPlayer 基本播放. 2 GestureVideoPlayer 增加手势 亮度,音量,快进,等手势. 3 Ma ...

  4. 基于exoplayer播放器的高斯模糊视频滤镜

    最近项目需求,视频滤镜要用高斯模糊.奈何网上全是图片高斯模糊,且模糊的强度不够,效果并不是自己需要的. 于是,打算自己写一个. exoPlayer播放器自带滤镜,所以用这个播放器来做. 滤镜的话,用到 ...

  5. 基于exoplayer播放器的高斯模糊视频滤镜,整合aar文件,给伸手党

    接入步骤如下: 接入步骤 1.aar文件拷贝至app下libs文件夹内 2.在app下的build.gradle中添加(最外层) repositories {flatDir {dirs 'libs'} ...

  6. ExoPlayer 源码阅读小记--HLS播放带缓存加载M38U文件过程

    基于ExoPlayer 2.17.1源码分析,基本是一边看一边写的流水账,记录下防止以后忘了: 第一步createMediaSource创建HlsMediaSource对象时同时会实例化出HlsPla ...

  7. Android中视频播放器的选择,MediaPlayer、ExoPlayer、ijkplayer简单对比

    MediaPlayer 在Android系统中对于视频播放器有原生的实现MediaPlayer, 以及将MediaPlayer,SurfaceView封装在一起的VideoView, 两者都只是使用硬 ...

  8. Android 开源框架 ( 十六 ) 视频播放器 --- JiaoZiVideoPlayer(JieCaoVideoPlayer)

    原JieCaoVideoPlayer 不知道什么时候改名了,现在叫JiaoZiVideoPlayer. 项目GitHub地址:https://github.com/lipangit/JiaoZiVid ...

  9. 针对Android平台播放器开源库NiceVieoPlayer倍速的开发

    Android平台的视频开源库可谓百花齐放,直接给出比较流行的几大框架github地址:https://github.com/search?l=Java&o=desc&q=ExoPla ...

  10. android 第三方视频库,android视频播放库

    因为要学习使用当前流行的视频播放库,下面介绍当前比较流行的四款视频播放库.(文章末有一些优秀的播放库) gsyvideoplayer ijkPlayer ExoPlayer jiaoziVideoPl ...

最新文章

  1. 相机与激光雷达融合的3D目标检测方法MVAF-Net
  2. 判断触发器正在处理的是插入,删除还是更新触发
  3. 【小白学习C++ 教程】八、在C++指针传递引用和Const关键字
  4. 设置静态ip上网_开始使用第一步:连上网线换个皮
  5. 【Tools】TortoiseGit安装图解
  6. 《碟中谍5》中惊鸿一瞥的步态识别技术,究其神在哪里?
  7. 小汤学编程之JAVA基础day11——集合框架:List/Set/Map集合、Collections集合工具类、泛型、TreeMap和TreeSet
  8. Zookeeper 如何选举master 主节点?
  9. Spark的StaticMemoryManager
  10. 相机模型与标定(十四)--误差分析
  11. 2021-04-23 Perl语言入门 导学
  12. JAVA定义矩形类 方法二
  13. Springboot 注解最全详解
  14. itunes下载的app在哪里及如何查看iTunes下载的软件
  15. Connection error: QRedisClient compiled without ssh support
  16. 山东计算机二级考试时间,21年9月二级考试报考时间!31省公告已出!
  17. 【量子通信到底是怎么回事?】量子通信的概念(光的偏振特性)、量子密钥分发(quantum key distribution,QKD)
  18. 使用 vue 和 canvas 制作的游戏
  19. 下载excel文件(旺铺助手)的方法
  20. linux的 lseek 函数

热门文章

  1. 算法设计分析(44页)
  2. 输出NSRange类型的数据
  3. 像素,色彩,分辨率什么的
  4. 内容查询部件 之 简单美化
  5. LUOGU P4281 [AHOI2008]紧急集合 / 聚会 (lca)
  6. Samba共享目录的多用户权限设置案例
  7. SPOJ 196 动态规划
  8. 重新理解管理信息化促进企业变革
  9. Star UML指导手册
  10. 五、bootstrap-fileinput