一.项目的引入
1.1源码地址
https://gitee.com/lcb1992/IjkPlayerView
1.2依赖包的引入
如果你项目是引用support包如下引入项目即可:
//视频播放框架
implementation 'com.github.Rukey7:IjkPlayerView:v1.0.4'
由于我自己的项目是用到了androidx包,引入各种报错,由于源码开发版本较低且用了support包到时版本不一致,我在源码的基础上新增了androidx的依赖包;
build文件以及settings文件的修改
implementation project(path: ':playerview')
include ':app', ':common',':playerview'
二.源码的调用
2.1在项目的AndroidManifest.xml文件中队activity进行如下配置
<activity
android:name=".IjkPlayerActivity"
android:configChanges="orientation|keyboardHidden|screenSize"/>
2.2把IjkPlayerView作为一个控件添加到你的布局中
<com.dl7.player.media.IjkPlayerView
android:id="@+id/player_view"
android:layout_width="match_parent"
android:layout_height="200dp"/>
2.3Activity设置
@Override
protected void onResume() {
super.onResume();
mPlayerView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mPlayerView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mPlayerView.onDestroy();
//PS:如果将设置只显示全屏状态,进行如下设置
//设置结束时返回的方向,防止返回上个界面先横再变竖屏体验感不好
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mPlayerView.configurationChanged(newConfig);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (mPlayerView.handleVolumeKey(keyCode)) {
return true;
}
return super.onKeyDown(keyCode, event);
}
@Override
public void onBackPressed() {
if (mPlayerView.onBackPressed()) {
return;
}
super.onBackPressed();
}
2.4弹幕发送的调用
//写入弹幕的资源流
InputStream stream = null;
try {
stream = getAssets().open("custom.json");
} catch (IOException e) {
e.printStackTrace();
}
//设置视频播放前的图片预览
Glide.with(this).load(IMAGE_URL).fitCenter().into(mPlayerView.mPlayerThumb);
mPlayerView.init()
.setTitle("这是个跑马灯TextView,标题要足够长才会跑。-(゜ -゜)つロ 乾杯~")
.enableDanmaku()//设置使用弹幕
// .setDanmakuCustomParser(new AcFunDanmakuParser(), AcFunDanmakuLoader.instance(), null)
// 注意 setDanmakuCustomParser() 要在 setDanmakuSource() 前调用
//自定义弹幕解析器:解析器、加载器、转换器
.setDanmakuCustomParser(new DanmakuParser(), DanmakuLoader.instance(), DanmakuConverter.instance())
.setDanmakuSource(stream)//设置弹幕资源
.setVideoPath(VIDEO_URL)//播放地址
//弹幕回调监听
.setDanmakuListener(new OnDanmakuListener<DanmakuData>() {
@Override
public boolean isValid() {
// TODO: 这里可以控制全屏模式下的是否可以发射弹幕,返回 true 才能发射,可判断用户是否登录
Log.w("CustomDanmakuActivity", "准备发射弹幕");
return true;
}
@Override
public void onDataObtain(DanmakuData data) {
// 添加个人信息
data.userName = "LONG";
data.userLevel = 2;
// 这个转换的数据格式 DanmakuData 需要配合 DanmakuConverter 来实现,如果没有设置转换器则默认返回 BaseDanmaku
Log.e("CustomDanmakuActivity", data.toString());
// GsonHelper.object2JsonStr(data)转换为Json字符串,可以直接保存到文件或服务器,参考{assets/custom.json}文件
Log.e("CustomDanmakuActivity", GsonHelper.object2JsonStr(data));
}
});
//发送弹幕
mIvSend.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mPlayerView.sendDanmaku(mEditText.getText().toString(), false);
mEditText.setText("");
_closeSoftInput();
}
});
2.5视频源的设置
mPlayerView.init()
.setTitle("这是个跑马灯TextView,标题要足够长才会跑。-(゜ -゜)つロ 乾杯~")
.setSkipTip(1000*60*1)//设置跳转目标进度,单位:ms
.enableDanmaku()
.setDanmakuSource(getResources().openRawResource(R.raw.bili))
//设置流畅、清晰、高清、超清、1080P五种视频资源
.setVideoSource(null, VIDEO_URL, VIDEO_HD_URL, null, null)
//选择视频源(上面五选一依次分别为:流畅、清晰、高清、超清和1080P)
.setMediaQuality(IjkPlayerView.MEDIA_QUALITY_HIGH);
设置的视频资源,无需设置.setVideoPath
2.6强制横(全)屏播放
mPlayerView.init()
.alwaysFullScreen()//设置只显示全屏状态
.enableOrientation()//使能视频翻转
.setVideoPath(VIDEO_URL)//视频地址
.enableDanmaku()//使用弹幕
.setDanmakuSource(getResources().openRawResource(R.raw.bili))//设置弹幕资源
.setTitle("这是个跑马灯TextView,标题要足够长才会跑。-(゜ -゜)つロ 乾杯~")
.start();