一分钟搞定 Android 视频播放器ExoPlayer的使用

打印 上一主题 下一主题

主题 805|帖子 805|积分 2415

作为一个资深的Android开辟人员,视频播放器是不可或缺的一个重要构成,今天先搞ExoPlayer
支持格式:
MP4, M4A, FMP4, WebM, MKV, MP3, Ogg, WAV, MPEG-TS, MPEG-PS, FLV and ADTS (AAC)等
详细使用方法:
(1)添加依赖
可以去官网检察最新的版本信息
  1.     implementation 'com.google.android.exoplayer:exoplayer-core:2.15.1'
  2.     implementation 'com.google.android.exoplayer:exoplayer-ui:2.15.1'
复制代码
(2)添加Java8的支持
  1.         android {
  2.             compileOptions {
  3.                 sourceCompatibility JavaVersion.VERSION_1_8
  4.                 targetCompatibility JavaVersion.VERSION_1_8
  5.             }
  6.         }
复制代码
(3)layout.xml 布局文件
  1. //app:resize_mode="zoom"设置居中显示,避免竖屏在小窗口展示变形
  2. <com.google.android.exoplayer2.ui.PlayerView
  3.         app:resize_mode="zoom"
  4.         android:id="@+id/video_view"
  5.         android:layout_width="match_parent"
  6.         android:layout_height="400dp"/>
复制代码
(4)初始化播放器
  1. private SimpleExoPlayer player;
  2.     private void initExoPlayer(){
  3.         String url = "你的url地址";
  4.         Uri uri = null;
  5.         uri = Uri.parse(url);
  6.         player = new SimpleExoPlayer.Builder(mContext).build();
  7.         DataSource.Factory dataSourceFactory = new DefaultDataSourceFactory(mContext, Util.getUserAgent(mContext,"Application"));
  8.         MediaSource videoSource = new ProgressiveMediaSource.Factory(dataSourceFactory).createMediaSource(uri);
  9.         //循环5次
  10.         LoopingMediaSource loopingMediaSource = new LoopingMediaSource(videoSource, 5);
  11.         player.prepare(loopingMediaSource);
  12.         player.setPlayWhenReady(true);//不想让其自动播放设为false
  13.         player.addListener(new Player.Listener() {
  14.             @Override
  15.             public void onPlaybackStateChanged(int playbackState) {
  16.                 switch (playbackState) {
  17.                     case Player.STATE_READY:
  18.                         Log.d("PLAY_STATE", "加载就绪,可以播放");
  19.                         break;
  20.                     case Player.STATE_BUFFERING:
  21.                         Log.d("PLAY_STATE", "缓冲中...");
  22.                         break;
  23.                     case Player.STATE_ENDED:
  24.                         Log.d("PLAY_STATE", "播放结束...");
  25.                         break;
  26.                     case Player.STATE_IDLE:
  27.                         break;
  28.                 }
  29.             }
  30.         });
  31.         binding.videoView.setPlayer(player);
  32.     }
复制代码
第四步完成就已经可以播放视频了
(5)释放
  1. @Override
  2.     protected void onDestroy() {
  3.         player.release();
  4.         super.onDestroy();
  5.     }
复制代码
(6)全屏
直接修改布局就可以了,这个没什么可介绍的,需要注意的是,状态栏标题栏需要隐藏掉
(7)自定义控制栏
需要在xml布局文件种添加这属性
app:controller_layout_id=“@layout/layout”
需要对应的id
1)进度条
  1.     <com.google.android.exoplayer2.ui.DefaultTimeBar
  2.         android:id="@+id/exo_progress"
  3.         android:layout_width="match_parent"
  4.         android:layout_height="15dp"
  5.         app:bar_height="2dp"
  6.         app:unplayed_color="@color/teal_200"
  7.         app:played_color="@color/teal_200"
  8.         app:scrubber_color="@color/teal_200"
  9.         app:buffered_color="@color/white"
  10.         tools:ignore="MissingConstraints" />
复制代码
2)开始按钮
  1.                 <ImageView
  2.                     android:layout_gravity="center"
  3.                     android:src="@drawable/video_play"
  4.                     android:id="@+id/exo_play"
  5.                     android:layout_width="40dp"
  6.                     android:layout_height="40dp"/>
复制代码
3)停息按钮
  1.                                 <ImageView
  2.                     android:layout_gravity="center"
  3.                     android:src="@drawable/stop"
  4.                     android:id="@+id/exo_pause"
  5.                     android:layout_width="40dp"
  6.                     android:layout_height="40dp"/>
复制代码
4)进度时间格式
  1.   <TextView
  2.                     android:layout_marginLeft="40dp"
  3.                     android:layout_gravity="center"
  4.                     android:id="@+id/exo_position"
  5.                     android:layout_width="wrap_content"
  6.                     android:layout_height="wrap_content"
  7.                     android:contentDescription="@null"
  8.                     android:text="1"
  9.                     android:textColor="@color/white"
  10.                     android:textSize="25dp" />
  11.                 <TextView
  12.                     android:layout_gravity="center"
  13.                     android:id="@+id/splash_tv"
  14.                     android:layout_width="wrap_content"
  15.                     android:layout_height="wrap_content"
  16.                     android:contentDescription="@null"
  17.                     android:text="/"
  18.                     android:textColor="@color/white"
  19.                     android:textSize="25dp"
  20.                     tools:text="/" />
  21.                 <TextView
  22.                     android:layout_gravity="center"
  23.                     android:id="@+id/exo_duration"
  24.                     android:layout_width="wrap_content"
  25.                     android:layout_height="wrap_content"
  26.                     android:contentDescription="@null"
  27.                     android:text="1"
  28.                     android:textColor="@color/white"
  29.                     android:textSize="25dp" />
复制代码
可以在页面上添加本身的个性化按钮,直接findViewById()就能实例化
打完收工,干活儿去吧

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

渣渣兔

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表