-
Notifications
You must be signed in to change notification settings - Fork 1k
Home
Doikki edited this page Aug 7, 2021
·
44 revisions
功能 | MediaPlayer | IjkPlayer | ExoPlayer |
---|---|---|---|
调整显示比例 | 支持 | 支持 | 支持 |
滑动调节播放进度、声音、亮度 | 支持 | 支持 | 支持 |
双击播放、暂停 | 支持 | 支持 | 支持 |
重力感应自动进入/退出全屏以及手动进入/退出全屏 | 支持 | 支持 | 支持 |
倍速播放 | 不支持 | 支持 | 支持 |
视频截图(使用SurfaceView时都不支持,默认用的是TextureView) | 支持 | 支持 | 支持 |
列表小窗全局悬浮播放 | 支持 | 支持 | 支持 |
连续播放一个列表的视频 | 支持 | 支持 | 支持 |
广告播放 | 支持 | 支持 | 支持 |
边播边缓存,使用了 AndroidVideoCache 实现 | 支持 | 支持 | 支持 |
弹幕,使用 DanmakuFlameMaster 实现 | 支持 | 支持 | 支持 |
多路播放器同时播放 | 支持 | 支持 | 支持 |
没有任何控制UI的纯播放 | 支持 | 支持 | 支持 |
Android 8.0画中画 | 支持 | 支持 | 支持 |
无缝衔接播放 | 支持 | 支持 | 支持 |
抖音,实现预加载 | 支持 | 支持 | 支持 |
建议使用之前先把demo跑一下,我对很多使用姿势都进行了演示。
gradle
repositories {
mavenCentral()
}
dependencies {
# 必选,内部默认使用系统mediaplayer进行解码
implementation 'xyz.doikki.android.dkplayer:dkplayer-java:3.3.5'
# 可选,包含StandardVideoController的实现
implementation 'xyz.doikki.android.dkplayer:dkplayer-ui:3.3.5'
# 可选,使用exoplayer进行解码
implementation 'xyz.doikki.android.dkplayer:player-exo:3.3.5'
# 可选,使用ijkplayer进行解码
implementation 'xyz.doikki.android.dkplayer:player-ijk:3.3.5'
# 可选,如需要缓存或者抖音预加载功能请引入此库
implementation 'xyz.doikki.android.dkplayer:videocache:3.3.5'
}
或者将library下载并导入项目中使用
- 3.0.4及以后的版本同时支持了androidx和support library。
- 3.1.2及以后的版本适配了刘海屏。
- 3.1.3及之后的版本已经将ijkplayer的so库合并到了player-ijk这个库里面了,开发者可通过abiFilters来筛选你需要的so,例如:
ndk {
abiFilters "armeabi-v7a"
}
3.1.2及之前的版本需要单独引入ijkplayer的so库:
implementation 'com.github.dueeeke.dkplayer:ijk-armv7a:3.x.x'
implementation 'com.github.dueeeke.dkplayer:ijk-armv5:3.x.x'
implementation 'com.github.dueeeke.dkplayer:ijk-arm64:3.x.x'
implementation 'com.github.dueeeke.dkplayer:ijk-x86:3.x.x'
implementation 'com.github.dueeeke.dkplayer:ijk-x86_64:3.x.x'
- 3.2.6及之前的版本发布在jcenter,需通过如下方式引入:
implementation 'com.github.dueeeke.dkplayer:dkplayer-java:x.x.x'
implementation 'com.github.dueeeke.dkplayer:dkplayer-ui:x.x.x'
implementation 'com.github.dueeeke.dkplayer:player-exo:x.x.x'
implementation 'com.github.dueeeke.dkplayer:player-ijk:x.x.x'
implementation 'com.github.dueeeke.dkplayer:videocache:x.x.x'
<xyz.doikki.videoplayer.player.VideoView
android:id="@+id/player"
android:layout_width="match_parent"
android:layout_height="300dp" />
注意:一定要定死宽高
videoView.setUrl(URL_VOD); //设置视频地址
StandardVideoController controller = new StandardVideoController(this);
controller.addDefaultControlComponent("标题", false);
videoView.setVideoController(controller); //设置控制器
videoView.start(); //开始播放,不调用则不自动播放
@Override
protected void onPause() {
super.onPause();
videoView.pause();
}
@Override
protected void onResume() {
super.onResume();
videoView.resume();
}
@Override
protected void onDestroy() {
super.onDestroy();
videoView.release();
}
@Override
public void onBackPressed() {
if (!videoView.onBackPressed()) {
super.onBackPressed();
}
}
<activity
android:name=".PlayerActivity"
android:configChanges="orientation|screenSize|keyboardHidden"
android:screenOrientation="portrait" /> <!-- or android:screenOrientation="landscape"-->
首先需要引入相关依赖,需要注意,播放器内部默认使用系统MediaPlayer进行解码
建议在Application
中调用
VideoViewManager.setConfig(VideoViewConfig.newBuilder()
//使用使用IjkPlayer解码
.setPlayerFactory(IjkPlayerFactory.create())
//使用ExoPlayer解码
.setPlayerFactory(ExoMediaPlayerFactory.create())
//使用MediaPlayer解码
.setPlayerFactory(AndroidMediaPlayerFactory.create())
.build());
调用VideoView
中的setPlayerFactory
方法,需要在start
方法之前调用方可生效
//使用IjkPlayer解码
mVideoView.setPlayerFactory(IjkPlayerFactory.create());
//使用ExoPlayer解码
mVideoView.setPlayerFactory(ExoMediaPlayerFactory.create());
//使用MediaPlayer解码
mVideoView.setPlayerFactory(AndroidMediaPlayerFactory.create());
参考demo ╰( ̄▽ ̄)╭
-keep class xyz.doikki.videoplayer.** { *; }
-dontwarn xyz.doikki.videoplayer.**
# IjkPlayer
-keep class tv.danmaku.ijk.** { *; }
-dontwarn tv.danmaku.ijk.**
# ExoPlayer
-keep class com.google.android.exoplayer2.** { *; }
-dontwarn com.google.android.exoplayer2.**