IjkPlayerView使用

一.项目的引入

1.1源码地址

https://gitee.com/lcb1992/IjkPlayerView

1.2依赖包的引入

如果你项目是引用support包如下引入项目即可:

    //视频播放框架
    implementation 'com.github.Rukey7:IjkPlayerView:v1.0.4'

由于我自己的项目是用到了androidx包,引入各种报错,由于源码开发版本较低且用了support包到时版本不一致,我在源码的基础上新增了androidx的依赖包;

源码下载:https://download.csdn.net/download/xxdw1992/13098610

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();

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值