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

    implementation 'fm.jiecao:jiecaovideoplayer:5.5.2'

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

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

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

            <android.support.v7.widget.CardViewandroid: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.JCVideoPlayerStandardandroid: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;@Overrideprotected 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 = 0jcvideoView.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.videoWidthval videoHeight = JCMediaManager.instance().mediaPlayer.videoHeightif (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@OnClickListenerif (jcvideoView.currentScreen == JCVideoPlayer.SCREEN_WINDOW_FULLSCREEN) {JCVideoPlayer.backPress()} else {jcvideoView.onEvent(JCUserAction.ON_ENTER_FULLSCREEN)jcvideoView.startWindowFullscreen()}})

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

修改完的效果

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

        <activityandroid:name=".PlayActivity"android:launchMode="singleTask"android:configChanges="orientation|screenSize|keyboardHidden"android:screenOrientation="portrait" />

Android 节操播放器 JCVideoPlayer视频播放器相关推荐

  1. Android制作简易的音乐播放器和视频播放器

    文章目录 制作简易的音乐播放器和视频播放器 播放多媒体文件 播放音频 MediaPlayer的工作流程 项目示例 播放视频 项目示例 制作简易的音乐播放器和视频播放器 播放多媒体文件 Android在 ...

  2. 【Android视频 之 阿里云视频播放器 二】

    说明一下:写文章时,我用的最新sdk版本是 4.7.0 哦,这里也只贴出关键代码,更多详细代码在文章末尾有地址链接的. [Android视频 之 阿里云视频播放器 一] 1 视频试看功能的实现 效果图 ...

  3. Android VR Player(全景视频播放器) [7]:视频列表的实现-网络视频

    Android VR Player(全景视频播放器) [7]:视频列表的实现-网络视频 前期准备 在之前的博文,Android VR Player(全景视频播放器) [6]:视频列表的实现-本地视频 ...

  4. 【Android视频 之 阿里云视频播放器 一】

    说到视频,现在短视频,小视频真是火的不行,抖音,快手,更是很多人手机上必会安装的一款app.那如何开发一款类似于抖音,集视频播放,直播,点播,拍摄,滤镜于一体的app呢,想想那都是相当的复杂.说到这里 ...

  5. 基于qt开发的智能系统:电子相册,监控摄像头模块,音乐播放器,视频播放器,电子时钟

    登录模块 源码请移步 //登录验证按钮函数 void MainWindow::on_loginBtn_clicked() {//获得userNameLEd输入框的文本userNameLEd->t ...

  6. Android VR Player(全景视频播放器) [6]:视频列表的实现-本地视频

    Android VR Player(全景视频播放器) [6]:视频列表的实现-本地视频 (本篇博客参考<Android第一行代码(第二版)>中关于RecyclerView的部分) 列表的实 ...

  7. android关于VideoView或Vitamio视频播放器横竖屏切换

    之前在网上寻求帮助时,留有QQ,好多人加我问过这个问题,现在为了方便大家,我将android关于VideoView或Vitamio视频播放器横竖屏切换的代码放在这里需要的朋友可以看一下,当然我做的这个 ...

  8. 播放视频android学习笔记---44_在线视频播放器,网络视频解析器,SurfaceView 控件使用方法...

    最近用使开辟的过程中涌现了一个小题问,顺便录记一下因原和法方--播放视频 44_在线视频播放器 ------------------------- 1.注意这里,在模拟器中,android2.2和an ...

  9. android vr播放器 开发,Android应用开发之Android VR Player(全景视频播放器)- ExoPlayer播放器MPEG-DASH视频播放...

    本文将带你了解Android应用开发之Android VR Player(全景视频播放器)- ExoPlayer播放器MPEG-DASH视频播放,希望本文对大家学Android有所帮助. Androi ...

最新文章

  1. 快速人脸验证--MobileFaceNets: Efficient CNNs for Accurate Real-time Face Verification on Mobile Devices
  2. JS 与 JAVA 跨语言实现 RSA 和 AES加密算法
  3. 变量的比较之equals 与 == 的区别
  4. 男孩子什么品质最吸引女生?
  5. EBS 报表输出PDF时中文乱码
  6. xml模块 增删改查
  7. python 表白程序代码_程序员python表白代码
  8. 如何在php文件中插入图片,使用PHPWord读取Word文件并插入图片
  9. java_232_GOF23设计模式_建造者模式详解_练习
  10. 游戏引擎设计的技术及详解
  11. java微信开发需具备的条件
  12. 聪明的笨鸟(人-AI试验版)
  13. app应用分发平台|苹果ios超级签名|APP封装打包|应用内测托管平台|iOS应用企业签名|Android应用上传内测-虾分发
  14. app小窗口悬浮工具_悬浮窗大师下载-悬浮窗大师 v6.6_手机乐园
  15. 【Python 脚本报错】AttributeError:‘module‘ has no attribute ‘xxx‘的解决方法
  16. 根据ID获取商品详情原数据(拼多多)
  17. Matlab中FFT运算加窗函数的验证
  18. impala查询报错问题 EOFException: Cannot seek after EOF 求解
  19. 51单片机常用通信方式之IIC通信(二)
  20. GPS卫星定位系统与手机窃听原理

热门文章

  1. C语言编写的文本文件/二进制文件格式互换
  2. 将Word文档转换为eReader或iBooks的ePub格式
  3. 【GZOJ】1369——小明跳楼梯
  4. 重磅发布!RK3568开发板C应用编程手册
  5. element-ui element-plus trap-focus - 分析
  6. 谷歌宣布设立100亿美元基金助力印度数字经济发展
  7. 解决 iOS 上 transform rotate 兼容问题
  8. 反欺诈如何驱动中国跨境电商品牌的业务扩张
  9. 多年经验,怎么做一个优秀的售后工程师
  10. openmp配置指南_/openmp (启用 OpenMP 支持)