YjPlay
一个支持自定义UI布局,流式API, 加密,直播 ,亮度,音量,快进等手势 ,广告视频预览,多种加载模式 ,多种分辨率切换 ,多种封面图, 自定义数据源,列表播放,倍数播放,边播变缓存<font color="red">不是使用AndroidVideoCache</font>,离线播放,神奇的播放器
Install / Use
/learn @yangchaojiang/YjPlayREADME
yjPlay
gif 显示有点卡,帧数低,实际很流畅
下载预览apk



基于exoPlayer 自定义播放器 JPlayer支持功能:
- ExoUserPlayer 基本播放(默认关闭手势 亮度,音量,快进,等手势,支持自定义布局)
- 自动适配适配TV。
- 支持横屏和竖屏两种模式全屏。
- 适配音频控制布局。
- 支持广告视频预览(轻松实现,完美切换,<font color="red">可自定义</font>)。
- 支持多种分辨率视频切换(已支持自定义布局样式)。
- 缓存下载加密视频功能(边播变缓存轻松实现<font color="red">不是使用AndroidVideoCache</font>。
- 支持列表集合 播放视频(<font color="red">列表到详情播放完美过度</font>)
- 支持网络类型 提示是否播放(可自定义屏蔽)。
- 支持视频加载布局, 错误布局,重播布局,提示布局自定义,更灵活实现自己布局样式。
- 支持视频加速慢速播放(已支持自定义布局样式)参考demo自定义。
- 支持多种视频封面图(两种模式封面图)。
- 支持支持自定义MediaSource。
- 支持精简版和完整版,选择使用更丰富。
- 增加离线下载辅助类ExoWholeDownLoadManger,ExoWholeDownloadTracker,ExoDownLoadManger,DownloadService()-->戳我)
- 支持播放锁屏功能和控制布局显示显示动画效果.
- 支持返回按钮和全屏按钮图标自定义。
- 支持自定义视频封面布局.(视频封面图布局样式完美多样化)。
- 支持视频实时进度(头条底部进度)。
- 支持流式API方式调用。
- 支持多种文件类型,MP4,M4A,WebM,Matroska,Ogg,WAV,MP3,MPEG-TS,MPEG-PS,FLV,ADTS (AAC),Flac,M3U8,mkv 等。
- 支持自定义多种 http,Rtmp,Https,Cronet等协议。
更新日志2.3.51→》戳我查看
一.引用类库
repositories {
jcenter()
mavenCentral();
}
dependencies {
//完整版
compile 'com.ycjiang:VideoPlayModule:2.3.61'
//精简版(没有smoothstreaming,dash,hls,只有常规点播功能)
compile 'com.ycjiang:VideoPlayModule-Lite:2.3.61'
}
提示:无法正常引用请在 repositories{ }添加已下代码 mavenCentral(url: "https://dl.bintray.com/ycjiang/ycjiang")
二.控件属性
基本使用如下
<chuangyuan.ycj.videolibrary.widget.VideoPlayerView
android:id="@+id/exo_play_context_id"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@android:color/transparent"
/>
1.控件属性
<chuangyuan.ycj.videolibrary.widget.VideoPlayerView
android:id="@+id/exo_play_context_id"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:controller_layout_id="@layout/simple_exo_playback_control_view"
app:player_layout_id="@layout/simple_exo_view"
app:player_replay_layout_id="@layout/custom_play_replay"
app:player_error_layout_id="@layout/custom_play_error"
app:player_hint_layout_id="@layout/custom_play_btn_hint"
app:player_load_layout_id="@layout/custom_exo_play_load"
app:player_gesture_audio_layout_id="@layout/custom_gesture_audio"
app:player_gesture_bright_layout_id="@layout/custom_gesture_brightness"
app:player_gesture_progress_layout_id="@layout/custom_gesture_pro"
app:player_preview_layout_id="@layout/exo_default_preview_layout"
app:resize_mode="fit"
app:show_timeout="3000"
app:surface_type="texture_view"
app:fastforward_increment="0"
app:rewind_increment="0"
app:user_watermark="@mipmap/watermark_big"
app:player_list="true"
app:use_controller="true"
app:player_fullscreen_image_selector="@drawable/custom_full_selector"
app:player_back_image="@drawable/ic_back_custom"
/>
2.属性说明 自定义视图的可用属性:
| name | type | info |
|-----------------------------------|-----------|---------------------------------------------------------------------------- |
| surface_type | enum | 视频渲染类型 texture_view 和surface_view 枚举类型 默认surface_view |
| resize_mode | enum | 视频缩放渲染显示方式一共5种 |
| | reference | 1.fit 正常模式 |
| | reference | 2.fixed_16_9 保持的是视频的比例16:9 |
| | reference | 3.fixed_4_3 保持的是视频比例4:3 |
| | reference | 4.fill 全屏模式,拉伸视频宽高 |
| | reference | 4.match 矩阵模式 | 0
| player_layout_id | reference | (播放器布局):目前默认布局 simple_exo_view.xml |
| controller_layout_id | reference | 控制器布局 默认有四种布局 |
| | reference | 1.simple_exo_playback_control_view.xml 视频封面控制布局下面,(默认) |
| | reference | 2.simple_exo_playback_list_view.xml.xml 在列表播放使用控制布局 |
| | reference | 3.simple_exo_playback_top_view.xml.xml 视频封面控制布局上面 |
| | reference | 4.exo_playback_control_view.xml exo 提供默认风格 |
| player_replay_layout_id | reference | 设置 自定义重播布局文件 |
| player_error_layout_id | reference | 设置 自定义错误布局文件 |
| player_hint_layout_id | reference | 设置 自定义非wifi提示布局文件 |
| player_load_layout_id | reference | 设置 自定义视频加载布局文件 |
| player_gesture_audio_layout_id | reference | 设置 自定义手势音频调节布局 |
| player_gesture_bright_layout_id | reference | 设置 自定义手势亮度调节布局 |
| player_gesture_progress_layout_id | reference | 设置 自定义手势进度调节布局 |
| player_preview_layout_id | reference | 设置 自定义封面图布局(默认 exo_default_preview_layout.xml) |
| player_list | boolean | 设置 是否指定列表播放 默认 false true 列表播放 |
| player_fullscreen_image_selector | reference | 设置 自定义全屏按钮selector |
| player_back_image | reference | 设置 自定义返回按钮图标 |
| default_artwork | reference | 设置 封面占位图 |
| show_timeout | integer | 设置 控制布局隐藏时间 默认值为3秒 |
| fastforward_increment | integer | 设置 按钮设置快进增量,以毫秒为单位(exo控制布局使用) |
| rewind_increment | integer | 设置 按钮设置快退增量,以毫秒为单位(exo控制布局使用) |
| user_watermark | reference | 设置 水印图片 默认在右上角 |
-
注意:
1.列表播放只能选择texture_view 不能选择surface_view,详情页面播放推荐surface_view
2.自定义全屏按钮selector
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/ic_custom_full" android:state_checked="true" /> <item android:drawable="@drawable/ic_custom_full_in" android:state_checked="false" /> </selector>3.自定义封面图布局中,也包含封
3.快速自定义视频进度控件颜色
如何自定义视频进度控件--->戳我 在app的module的values 文件下-> colors.xml 文件里
<!--视频加载缓存进度的面图控件。所以自定义封面图布局后,就不要再的控制布局使用封面图控件
颜色-->
<color name="timeBar_buffered_color">@color/light_green</color>
<!--已经播放过视频的颜色-->
<color name="timeBar_played_color">#c63020</color>
<!--没有加载过进度的颜色-->
<color name="timeBar_unplayed_color">@color/live_yellow</color>
<!--视频进度圆点的颜色-->
<color name="timeBar_scrubber_color">@color/colorAccent</color>
4.修改网络对话框提示文字内容
app.strings.xml
<string name="exo_play_reminder">您当前网络不是wifi,是否继续观看视频</string>
<string name="exo_play_wifi_hint_no">提示</string>
5.开启竖屏全屏模式。
```
VideoPlayerView.setVerticalFullScreen(true)
```
或者
````
exoPlayerManager = new VideoPlayerManager.Builder(VideoPlayerManager.TYPE_PLAY_GESTURE, videoPlayerView)
.setVerticalFullScreen(true)
````
6.在功能清单声明 AndroidManifest.xml
在activity节点 加上“android:configChanges="orientation|keyboardHidden|screenSize"”
如下实例:
<activity android:name="chuangyuan.ycj.yjplay.MainListActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait">
3.JAVA 代码
1 播放控制类
1.ExoUserPlayer
2 VideoPlayerView 控件 可用方法
| name | type | info | |------------------------------------------------|-----------|---------------------------------------------------------------------------- | | setTitle("标题")
