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