IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android 节操播放器 JCVideoPlayer视频播放器 -> 正文阅读

[移动开发]Android 节操播放器 JCVideoPlayer视频播放器

最近在做视频播放的项目,找了一些网上的第三方开源库,找来找去发现还是JCVideoPlayer还算好用些,网上讲解 JCVideoPlayer 的也不少,废话少说,开始上代码
首先要在项目的app的 build.gradle中 引入JCVideoPlayer库

    implementation 'fm.jiecao:jiecaovideoplayer:5.5.2'

在activity的xml文件中加入JCVideoPlayer控件

        <fm.jiecao.jcvideoplayer_lib.JCVideoPlayerStandard
            android:id="@+id/jcvideoView"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_centerInParent="true" />

如果想要视频框有圆角效果,还可以在外层加cardview

            <android.support.v7.widget.CardView
                android:id="@+id/my_item_cardview_jcvideo"
                app:cardBackgroundColor="@color/color_1D1E24"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginLeft="15dp"
                android:layout_marginTop="10dp"
                android:visibility="gone"
                app:cardCornerRadius="8dp"
                app:cardElevation="0dp">

                <fm.jiecao.jcvideoplayer_lib.JCVideoPlayerStandard
                    android:layout_width="200dp"
                    android:layout_height="200dp"
                    android:visibility="gone"
                    android:id="@+id/itemjcvideoView"/>

            </android.support.v7.widget.CardView>

这里有个坑要先说一下,如果不在代码里设置widthRatio和heightRatio 想放大jcvideoView是不可能的,即使你已经设置了 android:layout_height=“match_parent”, jcvideoView还是会保持默认的16:9横竖比,具体细节下面会提到。
做好了上面的工作就可以在代码中调用了

		/**
		*参数url为网络视频的播放路径
		*第二个参数为播放模式,SCREEN_LAYOUT_NORMAL //普通模式
		*					  SCREEN_LAYOUT_LIST  //与普通模式相同
		*                    SCREEN_WINDOW_FULLSCREEN//全屏模式
		*                   SCREEN_WINDOW_TINY//没有了 播放控制视图
		* 
		*第三个参数为视频标题
		*/
        jcvideoView.setUp(url, JCVideoPlayerStandard.SCREEN_LAYOUT_NORMAL, "") 
        jcvideoView.startVideo() //启动播放

播放效果如下
在这里插入图片描述

此时可以看到即使已经设置了 android:layout_height=“match_parent” 高度还是不变 这是因为代码中 默认保持横纵比16:9

下面是JCVideoPlayer.java 源码中代码片段

    public int widthRatio = 16;
    public int heightRatio = 9;

    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        if (currentScreen == SCREEN_WINDOW_FULLSCREEN || currentScreen == SCREEN_WINDOW_TINY) {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
            return;
        }
        if (widthRatio != 0 && heightRatio != 0) {
            int specWidth = MeasureSpec.getSize(widthMeasureSpec);
            int specHeight = (int) ((specWidth * (float) heightRatio) / widthRatio);
            setMeasuredDimension(specWidth, specHeight);

            int childWidthMeasureSpec = MeasureSpec.makeMeasureSpec(specWidth, MeasureSpec.EXACTLY);
            int childHeightMeasureSpec = MeasureSpec.makeMeasureSpec(specHeight, MeasureSpec.EXACTLY);
            getChildAt(0).measure(childWidthMeasureSpec, childHeightMeasureSpec);
        } else {
            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        }

    }

所以我们要把widthRatio 和 heightRatio 设置为0才可以设置成自己想要的尺寸

        jcvideoView.widthRatio = 0
        jcvideoView.heightRatio = 0

还有一个需要注意的点,JCVideoPlayer视频播放器会默认保持播放进度,即使activity已经销毁,如果你想要下次进入activity从头开始播放要先清除下进度

        JCUtils.saveProgress(context, url, 0)

还可以为jcvideoView 设置未播放时缩略图 通过设置 jcvideoView.thumbImageView就可以,下面我是通过glide来实现的

        showImg(jcvideoView.thumbImageView,url!!)

    fun showImg(iv: ImageView, url: String) {
        Glide.with(this@PlayActivity)
                .applyDefaultRequestOptions(RequestOptions().placeholder(if (TextUtils.isEmpty(SkinCompatManager.getInstance().curSkinName)) R.drawable.drawable_default_tmpry else R.drawable.drawable_default_tmpry_night)
                        .error(if (TextUtils.isEmpty(SkinCompatManager.getInstance().curSkinName)) R.drawable.drawable_default_tmpry else R.drawable.drawable_default_tmpry_night)
                        .frame(1000)
                        .signature(ObjectKey(url))
                )
                .asBitmap()
                .load(url)
                .error(Glide.with(this@PlayActivity)
                        .applyDefaultRequestOptions(RequestOptions()
                                .signature(ObjectKey(if (url.contains("?")) url.substring(0, url.indexOf("?")) else url)))
                        .asBitmap()
                        .load(if (url.contains("?")) url.substring(0, url.indexOf("?")) else url))
                .into(iv)
    }

JCVideoPlayerStandard默认有全屏模式,但是对横屏视频和竖屏视频的自适应不太好,只会自动全屏,并不会旋转屏幕,除非你旋转手机(全屏模式下默认开启屏幕旋转,即使已经提前关闭屏幕旋转功能),竖屏视频还好会自动全屏,横屏视频就会如下图:

在这里插入图片描述
这里我是通过重写全屏按钮的监听事件来实现的

        jcvideoView.fullscreenButton.setOnClickListener(View.OnClickListener {
            val videoWidth = JCMediaManager.instance().mediaPlayer.videoWidth
            val videoHeight = JCMediaManager.instance().mediaPlayer.videoHeight
            if (videoWidth >= videoHeight) {
                JCUtils.getAppCompActivity(jcvideoView.getContext()).requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE
            } else {
                JCUtils.getAppCompActivity(jcvideoView.getContext()).requestedOrientation = ActivityInfo.SCREEN_ORIENTATION_PORTRAIT
            }
            if (jcvideoView.currentState == JCVideoPlayer.CURRENT_STATE_AUTO_COMPLETE) return@OnClickListener
            if (jcvideoView.currentScreen == JCVideoPlayer.SCREEN_WINDOW_FULLSCREEN) {
                JCVideoPlayer.backPress()
            } else {
                jcvideoView.onEvent(JCUserAction.ON_ENTER_FULLSCREEN)
                jcvideoView.startWindowFullscreen()
            }
        })

首先获取视频分辨率,感谢 JCVideoPlayer 所有关键方法和属性都是public的,让库拓展成为了可能,
得到videoWidth和videoHeight ,判断是横屏视频还是竖屏视频,来提前设置旋转属性。 代码很简单基本一看就懂。

修改完的效果
在这里插入图片描述

本来到这就已经结束了,谁让安卓手机品牌多呢,有些手机在全屏旋转屏幕的时候还会旋转失败
这个属性一定不要忘screenSize,有些品牌手机不加就不行

        <activity
            android:name=".PlayActivity"
            android:launchMode="singleTask"
            android:configChanges="orientation|screenSize|keyboardHidden"
            android:screenOrientation="portrait" />
  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-11-29 16:26:00  更:2021-11-29 16:26:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 5:45:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码