渣渣兔 发表于 2024-11-2 12:40:47

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

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

                <TextView
                  android:layout_gravity="center"
                  android:id="@+id/splash_tv"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:contentDescription="@null"
                  android:text="/"
                  android:textColor="@color/white"
                  android:textSize="25dp"
                  tools:text="/" />

                <TextView
                  android:layout_gravity="center"
                  android:id="@+id/exo_duration"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:contentDescription="@null"
                  android:text="1"
                  android:textColor="@color/white"
                  android:textSize="25dp" />
可以在页面上添加本身的个性化按钮,直接findViewById()就能实例化
打完收工,干活儿去吧

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 一分钟搞定 Android 视频播放器ExoPlayer的使用