写在前面

在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:

android: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() {

@Override

public 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:

@Override

public 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() {

@Override

public boolean onClick(View view, boolean isPortrait) {

if(isPortrait){

finish();

}

return false;

}

});

如果 onClick() 返回了true,它会拦截controller中的事件.如果返回的是false 并且你设置了一个非空的OrientationListener,

ExoVideoView 如果处于横屏,ExoVideoView将尝试变回竖屏并调用OrientationLister.onOrientationChange()。

be called.

Others

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

videoView.addViewToControllerWhenLandscape(view);

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

提示

永远不要忘记去释放ExoPlayer.

videoView.releaseSelfPlayer();

or

player.release();

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

app目录下是demo。

ijk基于exo_基于 ExoPlayer 的 ExoVideoView相关推荐

  1. 基于JAVA基于Web的上门家教系统的设计与实现计算机毕业设计源码+系统+mysql数据库+lw文档+部署

    基于JAVA基于Web的上门家教系统的设计与实现计算机毕业设计源码+系统+mysql数据库+lw文档+部署 基于JAVA基于Web的上门家教系统的设计与实现计算机毕业设计源码+系统+mysql数据库+ ...

  2. 基于java基于Web的人事管理系统的设计与实现计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java基于Web的人事管理系统的设计与实现计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java基于Web的人事管理系统的设计与实现计算机毕业设计源码+系统+lw文档+my ...

  3. 基于java基于微服务架构的设备管理系统的设计与实现计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java基于微服务架构的设备管理系统的设计与实现计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java基于微服务架构的设备管理系统的设计与实现计算机毕业设计源码+系统+lw文 ...

  4. 基于JAVA基于web的公益募捐网站计算机毕业设计源码+系统+mysql数据库+lw文档+部署

    基于JAVA基于web的公益募捐网站计算机毕业设计源码+系统+mysql数据库+lw文档+部署 基于JAVA基于web的公益募捐网站计算机毕业设计源码+系统+mysql数据库+lw文档+部署 本源码技 ...

  5. 基于JAVA基于的智慧小区计算机毕业设计源码+系统+lw文档+部署

    基于JAVA基于的智慧小区计算机毕业设计源码+系统+lw文档+部署 基于JAVA基于的智慧小区计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语言:Java语言 开 ...

  6. 基于java基于VUE的个人记账管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java基于VUE的个人记账管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java基于VUE的个人记账管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调 ...

  7. 基于JAVA基于网络平台个人博客系统计算机毕业设计源码+系统+lw文档+部署

    基于JAVA基于网络平台个人博客系统计算机毕业设计源码+系统+lw文档+部署 基于JAVA基于网络平台个人博客系统计算机毕业设计源码+系统+lw文档+部署 本源码技术栈: 项目架构:B/S架构 开发语 ...

  8. 【ChatGPT4】 NLP(自然语言处理)第六课 基于统计和基于深度学习的依存句法分析方法

    我在起,点更新NLP自然语言处理==><王老师带我成为救世主> (1)-------------------------------------------------------- ...

  9. 基于java基于vue的百乐儿童玩具公司管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署

    基于java基于vue的百乐儿童玩具公司管理系统计算机毕业设计源码+系统+lw文档+mysql数据库+调试部署 基于java基于vue的百乐儿童玩具公司管理系统计算机毕业设计源码+系统+lw文档+my ...

最新文章

  1. 深入理解ceph-disk prepare 源码逻辑
  2. 在reader中勾选pdf复选框_绝对可勾选的在WORD 2003中加入复选框的方法
  3. boost::mpl模块实现copy相关的测试程序
  4. ORA-01031 权限不足-过程中DBA 角色用户无法执行DDL
  5. json php input,在php中读取json输入
  6. java 中violate_Java中的Volatile关键字
  7. 6 只能在公司代码xxxx的期间2020/08和2020/07中记账
  8. 年薪20万的前端工程师成长线路指南!
  9. 第一章节 ASP.NET Web应用程序基础(一)
  10. Java基础 --存储数据
  11. Disk Drill Enterprise for Mac(数据恢复软件)
  12. 知识点:计算机网络的 89 个核心概念
  13. Mac 效率工具必备神器 —— Alfred
  14. 地图加载不出来坐标标识点图片
  15. 黑马SpringBoot笔记
  16. 酷的计算机名字,最酷的名字大全,酷一点的QQ名字:愛伱沒商量
  17. (附源码)Springboot酒店会员点餐系统 毕业设计 072005
  18. 电脑桌面便签小工具下载,专业桌面待办便签软件
  19. android room 简书,Android Room 的坑
  20. cmd命令行配置windows防火墙

热门文章

  1. Docker 镜像仓库 Harbor 部署 及 跨数据复制
  2. java do po dto_彻底搞懂DAO,PO,BO,DTO,VO,DO
  3. 南京工资个税计算机,南京个税计算器_南京税后月薪|工资计算器_南京个人所得税查询 - Tax518...
  4. SD卡内存卡修复工具哪个好?4款工具对比测评
  5. 微信小程序发布后使用本地图片不显示问题
  6. android 点击接口回调,带你了解Android接口回调机制
  7. 牛客网练习—《网络基础》DAY4
  8. SSM+酒店管理系统的设计和实现 毕业设计-附源码260839
  9. 每天15分钟中度或快步走以燃烧100卡路里的热量
  10. 怎么用MATLAB做周期性预测,时间序列预测时,数据具有周期性怎么办(用MATLAB做) , 什么是时间序列预测法?...