Android JieCaoVideoPlayer 使用入门指南

来源:互联网 发布:数据的存储过程 编辑:程序博客网 时间:2024/06/17 11:07

前言

目前视频相关或者需要播放视频的 App 比较多,很多都要求能够在普通界面或者列表界面播放视频,并且能够全屏播放,这里选择 JieCaoVideoPlayer ,据我了解,在 github 上面出现简单集成就能集成列表、全屏、小屏播放的,最早的就是 JieCaoVideoPlayer,使用了一年多,还是很不错,虽然后面也出现了类似的控件,也都或多或少借鉴了 JieCaoVideoPlayer 。

JieCaoVideoPlayer (节操)

github 地址:JieCaoVideoPlayer
注意:有人在 github 上面搜到其他人的 JieCaoVideoPlayer,上面的才是最正宗的。

节操作者:Nathen,现实中不认识,在群里能看见他发言,这个开源项目是以前从事视频相关的工作总结出来的,虽然后来没有从事视频相关的工作,但是还是坚持为大家更新并且解决问题,在此说声谢谢。

使用方法 (先介绍 github 上面写的方法和部分技巧,接着介绍我自己总结)

  • 中文文档 , 按照文档中的5个步骤集成。
  • wiki,这个文档看的人比较少,有的比较简单的问题,作者都在 wiki 中写好了的,建议可以看看。不过作者也有段时间没有更新 wiki 了,不过大部分还是实用。
  • issues 特殊问题解决方案,除了在群里问,还可以在这里去搜,毕竟在群里问别人遇到别人忙的时候也不可能随时为你解决问题。
  • 上面的方法也是我们使用 github 上面三方项目的通用步骤,当然也可以去谷歌。

使用入门

这里的方法是我在上面的几步中整理出来的,和作者的有点不同,有的是自己添加的。

1、 导包

  • 依赖: compile 'fm.jiecao:jiecaovideoplayer:latest version' 这种方式最简单, latest version 需要换成最新版本。
  • jar包:各版本下载地址
  • module: 在 github 上面下载源代码以module 的方式导入,这种灵活性高,可以随意改成我们想要的效果。

2、 在layout 中使用

<fm.jiecao.jcvideoplayer_lib.JCVideoPlayerStandard        android:id="@+id/videoplayer"        android:layout_width="match_parent"        android:layout_height="200dp"/>

这里的高度是指组合控件的高度,不一定是显示中视频的高度,视频的高度和宽度按照比例 16:9 和 4:3 显示。比如有时候设置为500dp,但是视频只显示了300dp,其余的部分为黑屏,所以要想去掉黑屏,需要提前准确的知道视频的宽高,如果是用户上传的视频,在上传的时候一般需要同时上传视频文件、视频宽高参数、视频封面(封面的宽高与视频宽高一致,封面一般为视频截图,如果是自己添加的封面,尽量设置为视频宽高或者和视频宽高比相同,不同的话在显示封面的时候可能会出现拉伸变形)。

3、继承 AppCompatActivity

在Activity 、Fragment 中使用,因为在 JCVideoPlayerStandard 中使用了 AppCompatActivity 中的相关代码,所以在使用的 Activity 或者 fragment 依附的 Activity 必须继承 AppCompatActivity,不然在全屏的时候会出现空指针。 如果 Activity 已经继承了其他 Activity 且不是 AppCompatActivity,通过module 的方式修改源码也可以使用。

4、代码使用

JCVideoPlayerStandard videoplayer= (JCVideoPlayerStandard) findViewById(R.id.videoplayer);videoplayer.setUp(videoUrl , JCVideoPlayerStandard.SCREEN_LAYOUT_NORMAL, "视频标题");ImageLoader.with(context)           .load(pictureUrl)           .into(videoplayer.thumbImageView);

setup 方法 public void setUp(String url, int screen, Object... objects) ,第二个参数为进入视频显示的方式,目前一个有4个选项可选:

public static final int SCREEN_LAYOUT_NORMAL = 0;      //正常模式public static final int SCREEN_LAYOUT_LIST = 1;        //列表模式public static final int SCREEN_WINDOW_FULLSCREEN = 2;  //全屏模式public static final int SCREEN_WINDOW_TINY = 3;        //小屏模式  

videoplayer.thumbImageView 为封面View ,使用 glide 或者 Picasso 直接使用,如果使用的 fresco ,可以参照作者的 demo JCVideoPlayerStandardFresco ,记得在布局文件需要将 thumbImageView 对应的 ImageView 改成 SimpleDraweeView。

5、 拦截返回键事件(Activity 和 fragment)

作用:视频全屏的时候点击返回键退出全屏

  • Activity 中
@Overridepublic void onBackPressed() {    if (JCVideoPlayer.backPress()) {        return;    }    super.onBackPressed();}

着只是其中一种拦截返回键监听方法

  • Fragment 中
 @Override public void onResume() {    super.onResume();    getView().setFocusableInTouchMode(true);    getView().requestFocus();    getView().setOnKeyListener(new View.OnKeyListener() {        @Override        public boolean onKey(View v, int keyCode, KeyEvent event) {            if (event.getAction() == KeyEvent.ACTION_UP && keyCode == KeyEvent.KEYCODE_BACK) {                    if (JCVideoPlayer.backPress()) {                        return true;                    }                    return false;                }                return false;            }        });    }

也是其中一种方法

6、回收资源 releaseAllVideos

Activity 和 Fragment 中都可以在 onpause 方法中执行,如

@Overrideprotected void onPause() {    super.onPause();    JCVideoPlayer.releaseAllVideos();}

7、AndroidManifest 的设置

<activity    android:name="yourActivityName"    android:configChanges="orientation|screenSize|keyboardHidden"    android:hardwareAccelerated="true"    android:screenOrientation="portrait" /> <!-- or android:screenOrientation="landscape"-->

上面的参数主要说说 hardwareAccelerated,其余自行查询,因为在节操视频中使用了 TextureView,在TextureView 源码中有这样一段代码

@Overrideprotected void onAttachedToWindow() {   super.onAttachedToWindow();   if (!isHardwareAccelerated()) {       Log.w(LOG_TAG, "A TextureView or a subclass can only be "+ "used with        hardware acceleration enabled.");        }        if (mHadSurface) {            invalidate(true);            mHadSurface = false;        }    }

TextureView 或者它的子类只能在 开启硬件加速中使用,虽然说默认是开启硬件加速,但是有的可能在application 中使用了

 android:hardwareAccelerated="false"

加上Android 各个厂商的碎片化,建议加上启动硬件加速,这就是很多人说在使用中出现一直转圈圈的原因之一。

总结

对于简单的播放视频,直接使用上面的几步基本能够解决问题,很是方便,但是出现部分视频黑屏的问题,留在下一篇文章,这篇文章算是视频系列的开篇,后面会有 节操视频源码分析、以及实现类似微博、QQ空间自动播放、播放完一个自动滑动到下一个视频继续播放等等。
还有一个它的兄弟版本 GSYVideoPlayer 的相关使用,其实作者也讲的很清楚了。这里感谢各位为开源做出的贡献。