Android饺子播放器自定义

最近做了下视频播放功能,基于饺子播放器对其UI进行了修改,期间也遇到一些bug,记录一下。

引入

我使用的是6.4.2版本,7.0版本之后的源码有一些变化,不过大同小异;将github上源码下载下来,以import module的方式将源码中的jiaozivideoplayer引入。

切换播放源

我使用的是ijkplay,首先添加需要的依赖和一些.so文件

	//ijk播放内核
    implementation 'tv.danmaku.ijk.media:ijkplayer-java:0.8.4'
    implementation 'tv.danmaku.ijk.media:ijkplayer-armv7a:0.8.4'

添加如下.so文件:
在这里插入图片描述
jniLibs下载链接:https://download.csdn.net/download/qq_38356174/11826526

继续再build.gradle中添加如下代码:

android {
	
    defaultConfig {
        ...
        ndk {
            abiFilters "armeabi-v7a", "x86"
        }
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }

    compileOptions {
        sourceCompatibility JavaVersion.VERSION_1_8
        targetCompatibility JavaVersion.VERSION_1_8
    }
    
    packagingOptions {//加上这些代码
            pickFirst 'lib/armeabi-v7a/libc++_shared.so'
            pickFirst 'lib/armeabi-v8a/libc++_shared.so'
            pickFirst 'lib/arm64-v8a/libc++_shared.so'
            pickFirst 'lib/x86/libc++_shared.so'
            pickFirst 'lib/x86_64/libc++_shared.so'
            //exclude "lib/armeabi-v7a/librealmreact.so"
    }

}

将github下载的源码中的cn.jzvd.demo包下的CustomMediaPlayer下的JZMediaIjkplayer类复制到自己的项目中
在这里插入图片描述
到这里集成就结束了。

自定义UI

饺子的文档也有说明,自定义UI需要集成JzvdStd,重写getLayout,传入自己的布局文件,重写onClick事件以及其他生命周期事件即可。

我们先把module中(也就是jiaozivideoplayer包下)的jz_layout_std.xml复制一份到自己的项目layout目录下,并且重命名,我这里就叫custom_jzvd.xml;修改布局文件,添加自己需要的控件即可。

新建CustomJzvd类,继承JzvdStd类,重写getLayout方法,将custom_jzvd.xml传入;
具体方法如下:

  1. 在init方法中findviewById获取自己添加的控件;
  2. 在onClick中添加单击事件;
  3. 通过currentScreen获取当前屏幕类型;
  4. 通过changeUrl方法切换播放链接(上下集、清晰度);
  5. JZMediaManager可以快进回退,播放暂停等;
  6. onAutoCompletion中切换播放链接实现自动播放下一集;
  7. startWindowFullscreen进入全屏时调用(此处有坑,我使用的6.4.2版本在进入全屏后控件id发生变化,有些事件拿不到,需要在父类中通过startWindowFullscreen方法中的jzvd重新findviewbyid去设置一些事件);
  8. playOnThisJzvd回到普通状态时触发;
  9. changeUiToXXX系列方法可以改变不同状态时的UI(如操作栏隐藏显示等);
  10. 不断补充中。。。
public class CustomJzvd extends JzvdStd {

	Context mContext;

	public CustomJzvd(Context context) {
        super(context);
        mContext = context;
    }

    public CustomJzvd(Context context, AttributeSet attrs) {
        super(context, attrs);
        mContext = context;
    }

    @Override
    public int getLayoutId() {
        //传入自定义布局
        return R.layout.custom_jzvd;
    }
	
	@Override
    public void init(Context context) {
        super.init(context);
        //拿到自己添加的控件 设置listener
	}
	
	@Override
    public void onClick(View v) {
		super.onClick(v);
		//设置控件单击事件
	}
	@Override
    public void setUp(JZDataSource jzDataSource, int screen) {
        super.setUp(jzDataSource, screen);
        //这两行设置播放时屏幕状态
        Jzvd.FULLSCREEN_ORIENTATION = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
        Jzvd.NORMAL_ORIENTATION = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
    }

	@Override
    public void onAutoCompletion() {
        super.onAutoCompletion();
        //播放下一集 在这里切换url
    }

	@Override
    public void startWindowFullscreenFocus(Jzvd jzvd) {
        super.startWindowFullscreenFocus(jzvd);
        //进入全屏时调用
   }

	@Override
    public void playOnThisJzvd() {
        super.playOnThisJzvd();
        //退出全屏
        //Toast.makeText(mContext, "退出全屏", Toast.LENGTH_SHORT).show();
    }

}

使用

在xml布局中添加自定义的CustomJzvd

<com.xxx.jzplayer.CustomJzvd
                android:id="@+id/customJzvd"
                android:layout_width="match_parent"
                android:layout_height="250dp"/>

在activity中设置播放源

 		LinkedHashMap<String,String> map = new LinkedHashMap<>();
        map.put("程序员的自我修养 第1集","http://xxxx/test1.mp4");
        map.put("程序员的自我修养 第2集","http://xxxx/test2.mp4");
        map.put("程序员的自我修养 第3集","http://xxxx/test3.mp4");
        map.put("程序员的自我修养 第4集","http://xxxx/test4.mp4");
        map.put("程序员的自我修养 第5集","http://xxxx/test5.mp4");

        JZDataSource dataSource = new JZDataSource(map,"程序员的自我修养");
        dataSource.looping = true;
        dataSource.currentUrlIndex = 0;
        customJzvd.setUp(dataSource, JzvdStd.SCREEN_WINDOW_NORMAL);
        customJzvd.startVideo();
©️2020 CSDN 皮肤主题: 像素格子 设计师:CSDN官方博客 返回首页