前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于ExoPlayer的ExoVideoView

基于ExoPlayer的ExoVideoView

原创
作者头像
JarvanMo
修改2018-08-25 22:42:55
1.2K0
修改2018-08-25 22:42:55
举报
文章被收录于专栏:JarvanMo的IT专栏JarvanMo的IT专栏

###前言

本人之前写过一篇名为基于ExoPlayer的ExoPlayerVideoView的文章,近日发现竟然被盗用了。

今日再次发布本文是因为ExoVideoView升级啦,新版的更好用,支持更多功能,支持自定义controller。

特性

代码语言:txt
复制
1.自动处理音频焦点。
代码语言:txt
复制
2.根据传感器自动处理方向。
代码语言:txt
复制
3.手势支持。
代码语言:txt
复制
4.多清晰度选择支持。
代码语言:txt
复制
5.为控制器添加自定义布局.
代码语言:txt
复制
6.调整显示大小。
代码语言:txt
复制
7.自定义controller。

使用 ExoVideoView

1.依赖

最简单的方式是加入gradle依赖。请确认在工程的build.gradle中添加了JCenter和google()。

代码语言:txt
复制
repositories {
    jcenter()
    google()
}

然后在你的项目中添加如下代码:

代码语言:txt
复制
implementation 'com.jarvanmo:exoplayerview:2.0.8'

2.在xml中定义

在xml中使用 ExoVideoView:

代码语言:txt
复制
<com.jarvanmo.exoplayerview.ui.ExoVideoView
     android:id="@+id/videoView"
     android:layout_width="match_parent"
     android:layout_height="300dp"/>

3.在java代码中

ExoVideoView 提供了内建Player

代码语言:txt
复制
SimpleMediaSource mediaSource = new SimpleMediaSource(url);//也支持uri
videoView.play(mediaSource);
videoView.play(mediaSource,where);//play from a particular position

也可以使用自义的Player:

代码语言:txt
复制
videoView.setPlayer(player);

提示:不要忘记释放ExoPlayer:

代码语言:txt
复制
videoView.releasePlayer();

详情请移步demo.

3.方向管理

ExoVideoView 可以自动处理方向问题,前提是为ExoVideoView设置一个OrientationListener:

代码语言:txt
复制
    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:

代码语言:txt
复制
@Override
代码语言:txt
复制
public boolean onKeyDown(int keyCode, KeyEvent event) {
代码语言:txt
复制
    if (keyCode == KeyEvent.KEYCODE_BACK) {
代码语言:txt
复制
        return videoView.onKeyDown(keyCode, event);
代码语言:txt
复制
    }
代码语言:txt
复制
    return super.onKeyDown(keyCode, event);
代码语言:txt
复制
}
代码语言:txt
复制
为ExoVideoView设置监听:
```java
代码语言:txt
复制

videoView.setBackListener((view, isPortrait) -> {

代码语言:txt
复制
代码语言:txt
复制
    if (isPortrait) {
代码语言:txt
复制
代码语言:txt
复制
      //do something
代码语言:txt
复制
代码语言:txt
复制
    }
代码语言:txt
复制
代码语言:txt
复制
    return false;
代码语言:txt
复制
代码语言:txt
复制
});
代码语言:txt
复制

如果返回值是 true, 系统后续动作会被中断.否则,ExoVideoView会自动处理方向,并且会回调OrientationLister.onOrientationChange() .

高级

1.多清清晰度

ExoVideoView 内置清晰度选择器.如果开启发多清晰度并添加了多清晰度,内置清晰度选择器将被加入overlayFrameLayout.

代码语言:java
复制
代码语言:txt
复制
    List<ExoMediaSource.Quality> qualities = new ArrayList<>();
代码语言:txt
复制
    ExoMediaSource.Quality quality =new SimpleQuality(quality,mediaSource.url());
代码语言:txt
复制
    qualities.add(quality);
代码语言:txt
复制
    mediaSource.setQualities(qualities);
代码语言:txt
复制
### 2.Controller显示模式
```ExoVideoPlaybackController``` 被分为四个部分:
代码语言:txt
复制

1.Top

2.Top Landscape

3.Bottom

4.Bottom Landscape

代码语言:txt
复制
每一部分都可以被显示或隐藏:

app:controller_display_mode="all|none|top|top_landscape|bottom|bottom_landscape"

代码语言:txt
复制
在java中:

videoView.setControllerDisplayMode(mode);

代码语言:txt
复制
### 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有定义。具体可看源码。

代码语言:txt
复制
app:controller_layout_id="@layout/my_controller"

其他

代码语言:txt
复制
  app:controller_background="@android:color/holo_orange_dark"
  app:use_artwork="true"
  app:default_artwork="@drawable/default_art"

我的博客即将搬运同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite_code=19tbyocergjaa

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 使用 ExoVideoView
    • 1.依赖
      • 2.在xml中定义
        • 3.在java代码中
          • 3.方向管理
          • 高级
            • 1.多清清晰度
              • 4.使用自定义controller布局
              • 其他
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档