深入了解请看demo

https://github.com/xiaoyanger0825/NiceVieoPlayer

在Gradle中添加依赖:

allprojects {repositories {...maven { url 'https://jitpack.io' }}
}dependencies {compile 'com.github.xiaoyanger0825:NiceVieoPlayer:v2.2'
}

在对应视频界面所在的Activity的Manifest.xml中需要添加如下配置:

android:configChanges="orientation|keyboardHidden|screenSize"

1.在Activity中使用
在Activity中使用时,该Activity需要继承自AppCompatActivity,在onStop中需要释放播放器,并且要在onBackPress中处理按下返回键的逻辑:

private void init() {mNiceVideoPlayer = (NiceVideoPlayer) findViewById(R.id.nice_video_player);mNiceVideoPlayer.setPlayerType(NiceVideoPlayer.TYPE_IJK); // or NiceVideoPlayer.TYPE_NATIVEmNiceVideoPlayer.setUp(mVideoUrl, null);TxVideoPlayerController controller = new TxVideoPlayerController(this);controller.setTitle(mTitle);controller.setImage(mImageUrl);mNiceVideoPlayer.setController(controller);
}@Override
protected void onStop() {super.onStop();// 在onStop时释放掉播放器NiceVideoPlayerManager.instance().releaseNiceVideoPlayer();
}
@Override
public void onBackPressed() {// 在全屏或者小窗口时按返回键要先退出全屏或小窗口,// 所以在Activity中onBackPress要交给NiceVideoPlayer先处理。if (NiceVideoPlayerManager.instance().onBackPressd()) return;super.onBackPressed();
}
详细可参考demo中的TinyWindowPlayActivity、ChangeClarityActivity、RecyclerViewActivity.

2.在Fragment中使用
在Fragment中使用时,该Fragment外层的Activity需要继承自AppCompatActivity,并且也要处理返回键按下逻辑:

public class XXXActivity extends AppCompatActivity {...@Overridepublic void onBackPressed() {// 在全屏或者小窗口时按返回键要先退出全屏或小窗口,// 所以在Activity中onBackPress要交给NiceVideoPlayer先处理。if (NiceVideoPlayerManager.instance().onBackPressd()) return;super.onBackPressed();}...
}

同时在Fragment中的onStop方法中释放播放器:

public class XXXFragenment extends Fragment {...@Overridepublic void onStop() {super.onStop();NiceVideoPlayerManager.instance().releaseNiceVideoPlayer();}...
}

3.切换清晰度
如果需要切换清晰度,需要在controller中配置清晰度相关的等级和视频链接地址:

private void init() {mNiceVideoPlayer = (NiceVideoPlayer) findViewById(R.id.nice_video_player);mNiceVideoPlayer.setPlayerType(NiceVideoPlayer.TYPE_IJK); // IjkPlayer or MediaPlayerTxVideoPlayerController controller = new TxVideoPlayerController(this);controller.setTitle(mTitle);controller.setClarity(getClarites(), 0);    // 设置清晰度以及默认播放的清晰度Glide.with(this).load(mImageUrl).placeholder(R.drawable.img_default).crossFade().into(controller.imageView());mNiceVideoPlayer.setController(controller);
}public List<Clarity> getClarites() {List<Clarity> clarities = new ArrayList<>();clarities.add(new Clarity("标清", "270P", "http://play.g3proxy.lecloud.com/vod/v2/MjUxLzE2LzgvbGV0di11dHMvMTQvdmVyXzAwXzIyLTExMDc2NDEzODctYXZjLTE5OTgxOS1hYWMtNDgwMDAtNTI2MTEwLTE3MDg3NjEzLWY1OGY2YzM1NjkwZTA2ZGFmYjg2MTVlYzc5MjEyZjU4LTE0OTg1NTc2ODY4MjMubXA0?b=259&mmsid=65565355&tm=1499247143&key=f0eadb4f30c404d49ff8ebad673d3742&platid=3&splatid=345&playid=0&tss=no&vtype=21&cvid=2026135183914&payff=0&pip=08cc52f8b09acd3eff8bf31688ddeced&format=0&sign=mb&dname=mobile&expect=1&tag=mobile&xformat=super"));clarities.add(new Clarity("高清", "480P", "http://play.g3proxy.lecloud.com/vod/v2/MjQ5LzM3LzIwL2xldHYtdXRzLzE0L3Zlcl8wMF8yMi0xMTA3NjQxMzkwLWF2Yy00MTk4MTAtYWFjLTQ4MDAwLTUyNjExMC0zMTU1NTY1Mi00ZmJjYzFkNzA1NWMyNDc4MDc5OTYxODg1N2RjNzEwMi0xNDk4NTU3OTYxNzQ4Lm1wNA==?b=479&mmsid=65565355&tm=1499247143&key=98c7e781f1145aba07cb0d6ec06f6c12&platid=3&splatid=345&playid=0&tss=no&vtype=13&cvid=2026135183914&payff=0&pip=08cc52f8b09acd3eff8bf31688ddeced&format=0&sign=mb&dname=mobile&expect=1&tag=mobile&xformat=super"));clarities.add(new Clarity("超清", "720P", "http://play.g3proxy.lecloud.com/vod/v2/MjQ5LzM3LzIwL2xldHYtdXRzLzE0L3Zlcl8wMF8yMi0xMTA3NjQxMzkwLWF2Yy00MTk4MTAtYWFjLTQ4MDAwLTUyNjExMC0zMTU1NTY1Mi00ZmJjYzFkNzA1NWMyNDc4MDc5OTYxODg1N2RjNzEwMi0xNDk4NTU3OTYxNzQ4Lm1wNA==?b=479&mmsid=65565355&tm=1499247143&key=98c7e781f1145aba07cb0d6ec06f6c12&platid=3&splatid=345&playid=0&tss=no&vtype=13&cvid=2026135183914&payff=0&pip=08cc52f8b09acd3eff8bf31688ddeced&format=0&sign=mb&dname=mobile&expect=1&tag=mobile&xformat=super"));clarities.add(new Clarity("蓝光", "1080P", "http://play.g3proxy.lecloud.com/vod/v2/MjQ5LzM3LzIwL2xldHYtdXRzLzE0L3Zlcl8wMF8yMi0xMTA3NjQxMzkwLWF2Yy00MTk4MTAtYWFjLTQ4MDAwLTUyNjExMC0zMTU1NTY1Mi00ZmJjYzFkNzA1NWMyNDc4MDc5OTYxODg1N2RjNzEwMi0xNDk4NTU3OTYxNzQ4Lm1wNA==?b=479&mmsid=65565355&tm=1499247143&key=98c7e781f1145aba07cb0d6ec06f6c12&platid=3&splatid=345&playid=0&tss=no&vtype=13&cvid=2026135183914&payff=0&pip=08cc52f8b09acd3eff8bf31688ddeced&format=0&sign=mb&dname=mobile&expect=1&tag=mobile&xformat=super"));return clarities;
}

详细参考demo中的ChangeClarityActivity

4.在RecyclerView列表中使用
在ReclerView列表中使用时需要监听itemView回收,以此释放掉对应的播放器

mRecyclerView.setRecyclerListener(new RecyclerView.RecyclerListener() {@Overridepublic void onViewRecycled(RecyclerView.ViewHolder holder) {NiceVideoPlayer niceVideoPlayer = ((VideoViewHolder) holder).mVideoPlayer;if (niceVideoPlayer == NiceVideoPlayerManager.instance().getCurrentNiceVideoPlayer()) {NiceVideoPlayerManager.instance().releaseNiceVideoPlayer();}}
});

详细参考demo中的RecyclerViewActivity.

5.播放时Home键按下以及回到播放界面的处理
按照上面的做法,在onStop直接释放掉播放器,那么在播放时按下Home键播放器也会被释放掉,如果在此回到播放界面,播放器回到最初始的状态。如果需要在播放的时候按下Home键只是暂停播放器,重新回到播放界面时又继续播放,那么可以参考demo中的CompatHomeKeyActiivty,或者对应的Activity集成自CompatHomeKeyActiivty,详细参考demo中的ProcessHome1Activity。当然,如果是在Fragment中,参考CompatKeyFragment,或者继承自CompatKeyFragment(外层的Activity还是继承自AppCompat,并处理onBackPress),详细参考demo中的ProcessHome2Activity.

超强加载网络视频框架,支持任何地方使用,防火山小视频,今日头条视频等等相关推荐

  1. 今日头条视频伪原创 视频md5有什么用

             今日头条视频伪原创 视频md5有什么用          用户获取成本低                      在短视频操作中,视频修改的作用显得尤为重要,这里介绍几款常见的工具 ...

  2. android 获取网络视频资源,Android 加载网络视频(url地址)第三方框架简用

    正好最近做项目有个需要加载网络视频技术,就找了找,碰到了这个开源的框架.主要还是网络请求下来的视频地址,然后简单的,赋一下值,非常OK.不过限自己练习用毕竟看需求的嘛,不多介绍复制用吧. 先看看效果大 ...

  3. android webView加载网络视频

    之前,我写过webView加载本地网页的博客,今天,就写写webView加载网络视频的内容. 一.加载网页 1.WebView用来显示网页,使用必须时刻注意我们需要添加网络权限 <uses-pe ...

  4. 安卓加载图片四大框架

    主流图片加载框架? 1> Picasso 2> Glide 3> Fresco 4> ImageLoader 介绍: Picasso:和Square的网络库一起能发挥最大作用, ...

  5. android加载网页pdf,android 一行代码搞定加载网络 pdf 文件

    之前写过一篇Android打开本地pdf文件的文章,最后总结的时候说,后面一定要拓展库,让其也能打开网络的的pdf文件.今天终于可以兑现承诺了.frok一份代码github.com/JoanZapat ...

  6. 加载网络数据失败的原因:

    加载网络数据失败的原因 第一:网络权限未设置 Manifests里写入 <!--网络请求权限--><uses-permission android:name="androi ...

  7. layui树形懒加载_layui树形表格支持非异步和异步加载

    layui树形表格支持非异步和异步加载. 使用示例如下: 展开全部 展开一层 折叠全部 折叠一层 layui.config({ base: '/uui/treetable-lay/module/' } ...

  8. OKhttp加载网络上的图片

    使用OKhttp只需要做到五个步骤即可,下面通过一个Demo来看看OKhttp的强大之处(最下面有完整代码和详细注释): 一.关联OKhttp框架,添加网络权限 1.jar包准备 官方介绍页面有链接位 ...

  9. Qt界面加载网络摄像头,并实时显示,两种更新界面的方法

    Qt界面加载网络摄像头,并实时显示,两种更新界面的方法 1.Qt界面加载网络摄像头,并实时显示,根据头文件中的宏定义来区分使用哪种方式.①Qt信号槽更新界面,②c语言回调方式更新界面 2.使用Open ...

最新文章

  1. 实验测试2SK241的g-s击穿电压
  2. D435 pyrealsense 如何实时获取摄像头的曝光值?get_frame_metadata(rs.frame_metadata_value.actual_exposure)成功了(更新UWP)
  3. c++ 方向_GE医疗C型臂系列手术机设备全球装机量破万
  4. poj 1060 Modular multiplication of polynomials
  5. 【空间数据库】Windows操作系统PostgreSQL+PostGIS环境搭建图文安装教程
  6. Maven的学习资料收集--(九) 构建SSH项目以及专栏maven
  7. 小程序遵循的语法_我如何构建一个遵循股市针对freeCodeCamp挑战的应用程序。
  8. Shell 操作(一)
  9. c语言程序计算器清屏功能,C语言实现计算器功能
  10. golang常量与逻辑运算基本语法
  11. 酒桌上的潜规则和技巧,男人必学
  12. Phyton学习笔记
  13. ESP8266 AP服务器设置
  14. 【认知实习】虚拟现实体验
  15. JS 测试网络速度与网络延迟
  16. C/C++ 余弦函数 cos - C语言零基础入门教程
  17. 本科毕业论文-软件开发类-《基于Android端开关控制系统的设计与实现》-论文模板
  18. 1256:献给阿尔吉侬的花束
  19. Python基础 实例
  20. Romax在法雷奥研发低功耗电驱动系统中的应用

热门文章

  1. Flutter 评价星星 组件
  2. MySQL测试SQL执行的速度测试
  3. Ubuntu上编译安装迅雷XwareDesktop
  4. 博图14软件安装顺序_博图软件安装顺序 为什么博途用的人不多
  5. Meta分析答疑:如何将文献偏倚风险图注释改成中文?
  6. 计算机图形学基础:双向反射分布函数 BRDF
  7. 安装Socat安装RabbitMQ
  8. HDU - 5965
  9. 窗体程序把Excel表导入到Datagridview中
  10. 2021年嵌入式面试题汇总(最新经典)