代码拉取完成,页面将自动刷新
基于Kotlin开发的播放器,默认支持MediaPlayer播放器,可扩展VLC播放器、IJK播放器、EXO播放器、阿里云播放器、以及任何使用TextureView的播放器, 开箱即用,欢迎提 issue 和 pull request
简书相关介绍(待完善):https://www.jianshu.com/nb/50294642
implementation 'com.gitee.zhangmengxiong:MXVideo:1.9.4'
dependencies {
implementation 'com.gitee.zhangmengxiong:MXVideo:x.x.x'
}
<com.mx.video.MXVideoStd
android:id="@+id/mxVideoStd"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
// Activity或者Fragment中生命周期变更,处理进入后台/前台时的暂停/续播功能
override fun onStart() {
mxVideoStd.onStart()
super.onStart()
}
override fun onStop() {
mxVideoStd.onStop()
super.onStop()
}
// 设置播放占位图
Glide.with(this).load("http://www.xxx.com/xxx.png").into(mxVideoStd.getPosterImageView())
// 默认从上一次进度播放
mxVideoStd.setSource(MXPlaySource(Uri.parse("https://aaa.bbb.com/xxx.mp4"), "标题1"))
mxVideoStd.startPlay()
// 从头开始播放
mxVideoStd.setSource(MXPlaySource(Uri.parse("https://aaa.bbb.com/xxx.mp4"), "标题1"), seekTo = 0)
mxVideoStd.startPlay()
// 从第10秒开始播放
mxVideoStd.setSource(MXPlaySource(Uri.parse("https://aaa.bbb.com/xxx.mp4"), "标题1"), seekTo = 10)
mxVideoStd.startPlay()
MXPlaySource 可选参数说明:
参数 | 说明 | 默认值 |
---|---|---|
title | 标题 | "" |
headerMap | 网络请求头部 | null |
isLooping | 是否循环播放 | false |
enableSaveProgress | 是否存储、读取播放进度 | true |
isLiveSource | 是否直播源,当时直播时,不显示进度,无法快进快退暂停 | false |
mxVideoStd.addOnVideoListener(object : MXVideoListener() {
// 播放状态变更
override fun onStateChange(state: MXState) {
}
// 播放时间变更
override fun onPlayTicket(position: Int, duration: Int) {
}
})
这里MXVideo默认持有当前播放的MXVideoStd,可以使用静态方法操作退出全屏、释放资源等功能。
也可以直接使用viewId:mxVideoStd.isFullScreen(),mxVideoStd.isFullScreen(),mxVideoStd.release() 等方法。
override fun onBackPressed() {
if (MXVideo.isFullScreen()) {
MXVideo.gotoNormalScreen()
return
}
super.onBackPressed()
}
override fun onDestroy() {
MXVideo.releaseAll()
super.onDestroy()
}
// 默认MediaPlayer播放器,库默认内置
com.mx.video.player.MXSystemPlayer
// 谷歌的Exo播放器
com.mx.mxvideo_demo.player.exo.MXExoPlayer
// VLC播放器
com.mx.mxvideo_demo.player.vlc.MXVLCPlayer
// IJK播放器
com.mx.mxvideo_demo.player.MXIJKPlayer
// 阿里云播放器,仅支持 ”armeabi-v7a“、”arm64-v8a“ 两种CPU
com.mx.mxvideo_demo.player.MXAliPlayer
// 设置播放源是可以设置内核,默认 = MXSystemPlayer
mxVideoStd.setPlayer(MXSystemPlayer::class.java)
mxVideoStd.setSource(MXPlaySource(Uri.parse("xxx"), title = "xxx"), seekTo = 0)
// 默认旋转角度 = MXOrientation.DEGREE_0
mxVideoStd.setTextureOrientation(MXOrientation.DEGREE_90)
// 默认=false
mxVideoStd.setAudioMute(true)
// 默认=1f,当设置=0f时,视频则静音
// 取值范围:0f -> 1f
mxVideoStd.setVolumePercent(0.5f)
// 强制填充宽高 MXScale.FILL_PARENT
// 根据视频大小,自适应宽高 MXScale.CENTER_CROP
// 默认填充规则 = MXScale.CENTER_CROP
mxVideoStd.setScaleType(MXScale.CENTER_CROP)
在页面xml中添加,layout_width一般设置match_parent,高度wrap_content
<com.mx.video.MXVideoStd
android:id="@+id/mxVideoStd"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
可以设置任意宽高比,如果设置宽高比,则控件高度需要设置android:layout_height="wrap_content",否则不生效。
当取消约束、MXVideo高度自适应、填充规则=MXScale.CENTER_CROP时,控件高度会自动根据视频宽高自动填充高度
// MXVideoStd控件设置宽高比= 16:9
mxVideoStd.setDimensionRatio(16.0 / 9.0)
// MXVideoStd控件设置宽高比= 4:3
mxVideoStd.setDimensionRatio(4.0 / 3.0)
// 取消约束
mxVideoStd.setDimensionRatio(0.0)
// 进度单位:秒 可以在启动播放后、错误或播完之前调用
mxVideoStd.seekTo(55)
// 播放前设置 默认=true
mxVideoStd.getConfig().canSeekByUser.set(false)
// 播放前设置 默认=true
mxVideoStd.getConfig().canFullScreen.set(false)
// 播放前设置 默认=true
mxVideoStd.getConfig().canShowNetSpeed.set(false)
// 播放前设置 默认=false
mxVideoStd.getConfig().hidePlayBtnWhenNoSource.set(false)
// 播放前设置 默认=true
// 全屏按钮只有在 canFullScreen=true && showFullScreenButton=true 时显示
mxVideoStd.getConfig().showFullScreenButton.set(false)
// 播放前设置 默认=true
mxVideoStd.getConfig().canShowSystemTime.set(false)
// 播放前设置 默认=true
mxVideoStd.getConfig().canShowBottomSeekBar.set(false)
// 播放前设置 默认=true
mxVideoStd.getConfig().canShowBatteryImg.set(false)
// 播放前设置 默认=true
mxVideoStd.getConfig().showTipIfNotWifi.set(false)
// 播放前设置 默认=false
mxVideoStd.getConfig().mirrorMode.set(true)
// 播放前设置 默认=true
mxVideoStd.getConfig().gotoNormalScreenWhenComplete.set(false)
// 播放前设置 默认=true
mxVideoStd.getConfig().gotoNormalScreenWhenError.set(false)
// 播放前设置 默认=true
mxVideoStd.getConfig().canPauseByUser.set(false)
// 播放前设置 默认=false
mxVideoStd.getConfig().autoFullScreenBySensor.set(true)
// 播放前设置 默认=MXSensorMode.SENSOR_FIT_VIDEO
// MXSensorMode.SENSOR_AUTO = 跟随重力方向
// MXSensorMode.SENSOR_FIT_VIDEO = 跟随视频宽高自动旋转 0 或 180 度
// MXSensorMode.SENSOR_NO = 根据视频宽高比固定横屏/竖屏,横屏 = 视频宽>=高 -- 竖屏 = 视频宽<高
mxVideoStd.getConfig().fullScreenSensorMode.set(MXSensorMode.SENSOR_AUTO)
// 播放前设置 默认=false
mxVideoStd.getConfig().replayLiveSourceWhenError.set(true)
// 将动画时长设置为 <=0 时,禁止动画效果
mxVideoStd.getConfig().animatorDuration.set(0L)
// 默认时长200毫秒
mxVideoStd.getConfig().animatorDuration.set(200L)
if (mxVideoStd.isPlaying()) {
val bitmap: Bitmap? = mxVideoStd.getTextureView()?.bitmap
screenCapImg.setImageBitmap(bitmap)
}
// 默认非全屏时不支持滑动相关操作
config.enableTouchWhenNormalScreen.set(true)
// 播放倍数设置,默认1.0倍数播放
config.playSpeed.set(1.0)
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。