您的当前位置:首页正文

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

2024-10-31 来源:个人技术集锦

作为一个资深的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()就能实例化
打完收工,干活儿去吧

Top