[开源]支持IJK/Exo/MediaPlayer解码器切换多功能的轻便级播放器
开源系统视频直播
![[开源]支持IJK/Exo/MediaPlayer解码器切换多功能的轻便级播放器](https://yy123.ink/api/img/1782609473798-bigpoc.jpg)
一、开源项目简介
支持IJKPlayer、ExoPlayer、MediaPlayer和其它更多解码器切换、支持静音、镜像、渲染模式、倍速设置等功能的轻便级播放器,支持自定义解码器、控制器、UI交互组件和悬浮窗播放能力等
二、开源协议
使用Apache-2.0开源协议
三、界面展示
SDK及Demo部分功能预览



四、功能概述
SDK基础功能:
- 支持网络地址、直播流、本地Assets和Raw资源文件播放
- 支持播放倍速、缩放模式、静音、镜像等功能设置
- 支持自定义视频解码器、控制器、UI交互组件、视频画面渲染器
- 支持多播放器同时播放
- SDK默认控制器(局部UI交互可自定义)支持手势控制、付费试看等交互
- 支持任意位置启动Activity级别悬浮窗口播放
- 支持任意位置启动全局悬浮窗口播放
- 支持任意位置直接启动全屏播放
- 支持连续播放视频列表
- Demo:列表或组件之间无缝转场播放
- Demo:全局悬浮窗播放转场跳转Activity
- Demo:MediaPlayer、IjkPlayer、ExoPlayer三种解码器切换
- Demo:仿抖音,支持视频缓存、秒播
- Demo:弹幕交互
- Demo:Android8.0+画中画示例
五、技术选型
播放器框架结构图
- 如图所示,通过架构图可以直观的看到面向用户层的模块和交互都支持自定义,也包括视频解码器在内。
SDK集成
- 建议集成前先下载apk体验,找到自己想要实现的功能模块,后续集成可参考demo源码。
1、项目根build.gradle及模块build.gradle配置
//1.在你的根build.gradle中添加:
allprojects {
repositories {
maven { url 'https://jitpack.io' }
}
}
//2.在你的模块build.gradle中添加:
dependencies {
//播放器
implementation 'com.github.hty527.iPlayer:iplayer:2.0.4.1'
//ijk音视频解码器,根据需要使用
//implementation 'com.github.hty527.iPlayer:ijk:2.0.4.1'
//exo音视频解码器,根据需要使用
//implementation 'com.github.hty527.iPlayer:exo:2.0.4.1'
//音视频预缓存+边播边存,根据需要使用
//implementation 'com.github.hty527.iPlayer:cache:2.0.4.1'
}
2、在需要播放视频的xml中添加如下代码,或在适合的位置new VideoPlayer()
<com.android.iplayer.widget.VideoPlayer
android:id="@+id/video_player"
android:layout_width="match_parent"
android:layout_height="200dp"/>
3、播放器准备及开始播放
mVideoPlayer = (VideoPlayer) findViewById(R.id.video_player);
mVideoPlayer.getLayoutParams().height= getResources().getDisplayMetrics().widthPixels * 9 /16;//固定播放器高度,或高度设置为:match_parent
//使用SDK自带控制器+各UI交互组件
VideoController controller = mVideoPlayer.initController();
//设置视频标题(仅横屏状态可见)
controller.setTitle("测试地址播放");
//设置播放源
mVideoPlayer.setDataSource("https://upload.dongfeng-nissan.com.cn/nissan/video/202204/4cfde6f0-bf80-11ec-95c3-214c38efbbc8.mp4");
//异步开始准备播放
mVideoPlayer.prepareAsync();
4、生命周期处理
@Override
protected void onResume() {
super.onResume();
mVideoPlayer.onResume();
}
@Override
protected void onPause() {
super.onPause();
mVideoPlayer.onPause();
}
@Override
public void onBackPressed() {
if(mVideoPlayer.isBackPressed()){
super.onBackPressed();
}
}
@Override
protected void onDestroy() {
super.onDestroy();
mVideoPlayer.onDestroy();
}
5、常用API、更换解码器、自定义解码器、UI交互组件和悬浮窗口播放等功能请阅读wiki
评论