GSYVideoPlayer 视频播放库

摘要:
用于演示不同的效果(实际内容请参见相应的演示)04。一般使用模式1 privatevoinitit(){2videoPlayer=(StandardGSYVideoPlayer)findViewById(R.id.video_player);“测试视频”);Toast.LNGTH_SHORT).show();

01. 优先介绍一下模拟器中没有声音的问题:

GSYVideoPlayer 视频播放库第1张

官方Demo中的内容较多,我这边按照自己的需求,做了个小DEMO,便于后期引用学习

-----------------------------------------

02. 依赖配置      

1     //视频播放
2     implementation 'com.shuyu:GSYVideoPlayer:7.1.4'
3     //图像加载
4     implementation 'com.github.bumptech.glide:glide:4.12.0'
5     annotationProcessor 'com.github.bumptech.glide:compiler:4.12.0'

03. 主页,做为不同视频播放效果的导航模块,内置多个Button,  用于演示不同效果 (实际内容查看相应的demo)

      GSYVideoPlayer 视频播放库第2张

04. 常规使用模式      

 1 private void init() {
 2         videoPlayer = (StandardGSYVideoPlayer) findViewById(R.id.video_player);
 3         //视频资源配置
 4         String source1 = "http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4";
 5         videoPlayer.setUp(source1, true, "测试视频");
 6         //增加封面
 7         ImageView imageView = new ImageView(this);
 8         imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
 9         imageView.setImageResource(R.mipmap.xxx1);
10         videoPlayer.setThumbImageView(imageView);
11         //增加title
12         videoPlayer.getTitleTextView().setVisibility(View.VISIBLE);
13         //设置返回键
14         videoPlayer.getBackButton().setVisibility(View.VISIBLE);
15         //设置旋转
16         orientationUtils = new OrientationUtils(this, videoPlayer);
17         //设置全屏按键功能,这是使用的是选择屏幕,而不是全屏
18         videoPlayer.getFullscreenButton().setOnClickListener(new View.OnClickListener() {
19             @Override
20             public void onClick(View v) {
21                 //Toast.makeText(videoPlayer.getContext(),"点击了全屏按钮",Toast.LENGTH_SHORT).show();
22                 orientationUtils.resolveByClick();
23             }
24         });
25         //是否可以滑动调整
26         videoPlayer.setIsTouchWiget(true);
27         //设置返回按键功能
28         videoPlayer.getBackButton().setOnClickListener(new View.OnClickListener() {
29             @Override
30             public void onClick(View v) {
31                 //Toast.makeText(videoPlayer.getContext(),"点击了返回功能按钮",Toast.LENGTH_SHORT).show();
32                 onBackPressed();
33             }
34         });
35         //开始播放
36         videoPlayer.startPlayLogic();
37     }

 在APP不同状态,同步播放器相应的状态

 1 @Override
 2     protected void onPause() {
 3         super.onPause();
 4         videoPlayer.onVideoPause();
 5     }
 6 
 7     @Override
 8     protected void onResume() {
 9         super.onResume();
10         videoPlayer.onVideoResume();
11     }
12 
13     @Override
14     protected void onDestroy() {
15         super.onDestroy();
16         GSYVideoManager.releaseAllVideos();
17         if (orientationUtils != null)
18             orientationUtils.releaseListener();
19     }
20 
21     @Override
22     public void onBackPressed() {
23         //先返回正常状态
24         if (orientationUtils.getScreenType() == ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE) {
25             videoPlayer.getFullscreenButton().performClick();
26             return;
27         }
28         //释放所有
29         videoPlayer.setVideoAllCallBack(null);
30         super.onBackPressed();
31     }

 关于不同清晰度视频的配置

 1         String source1 = "http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4";
 2         String name = "普通";
 3         SwitchVideoModel switchVideoModel = new SwitchVideoModel(name, source1);
 4 
 5         String source2 = "http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f30.mp4";
 6         String name2 = "清晰";
 7         SwitchVideoModel switchVideoModel2 = new SwitchVideoModel(name2, source2);
 8 
 9         String source3 =  "https://res.exexm.com/cw_145225549855002";
10         String name3 = "外史";
11         SwitchVideoModel switchVideoModel3 = new SwitchVideoModel(name3, source3);
12 
13 
14         List<SwitchVideoModel> list = new ArrayList<>();
15         list.add(switchVideoModel);
16         list.add(switchVideoModel2);
17         list.add(switchVideoModel3);
18 
19         binding.videoPlayer.setUp(list, true, "测试视频");

关于广告内容项的配置

 1         ArrayList<GSYSampleADVideoPlayer.GSYADVideoModel> urls = new ArrayList<>();
 2         //广告1
 3         urls.add(new GSYSampleADVideoPlayer.GSYADVideoModel("http://7xjmzj.com1.z0.glb.clouddn.com/20171026175005_JObCxCE2.mp4",
 4                 "", GSYSampleADVideoPlayer.GSYADVideoModel.TYPE_AD));
 5         //正式内容1
 6         urls.add(new GSYSampleADVideoPlayer.GSYADVideoModel("http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f20.mp4",
 7                 "正文1标题", GSYSampleADVideoPlayer.GSYADVideoModel.TYPE_NORMAL));
 8         //广告2
 9         urls.add(new GSYSampleADVideoPlayer.GSYADVideoModel("http://7xjmzj.com1.z0.glb.clouddn.com/20171026175005_JObCxCE2.mp4",
10                 "", GSYSampleADVideoPlayer.GSYADVideoModel.TYPE_AD, true));
11         //正式内容2
12         urls.add(new GSYSampleADVideoPlayer.GSYADVideoModel("http://9890.vod.myqcloud.com/9890_4e292f9a3dd011e6b4078980237cc3d3.f30.mp4",
13                 "正文2标题", GSYSampleADVideoPlayer.GSYADVideoModel.TYPE_NORMAL));
14 
15         binding.adPlayer.setAdUp(urls, true, 0);

播放器相关功能配置

 1         binding.adPlayer.setIsTouchWiget(true);        
 2         binding.adPlayer.setRotateViewAuto(false);//关闭自动旋转
 3         binding.adPlayer.setLockLand(false);
 4         binding.adPlayer.setShowFullAnimation(false);
 5         binding.adPlayer.setNeedLockFull(true);
 6         binding.adPlayer.setVideoAllCallBack(this);
 7         binding.adPlayer.setLockClickListener(new LockClickListener() {
 8             @Override
 9             public void onClick(View view, boolean lock) {
10                 if (orientationUtils != null) {
11                     //配合下方的onConfigurationChanged
12                     orientationUtils.setEnable(!lock);
13                 }
14             }
15         });

04. 对于带广告播放器功能的扩展

      在官方DEMO中,有带广告的视频播放,但原DEMO中都是直接可以跳过去的,

      结合当前在线视频对广告内容的跳过规则,(非会员,必须看完广告,   或者  至少要看多少秒以后才能跳过广告)

     基于这项需求,自行扩展了一个播放器类    

      

 1     public class MVideoPlayer extends GSYSampleADVideoPlayer {
 2 
 3     public static final int tmpCanSkip=10;  //10秒后可跳出广告
 4 
 5     public MVideoPlayer(Context context, Boolean fullFlag) {
 6         super(context, fullFlag);
 7     }
 8 
 9     public MVideoPlayer(Context context) {
10         super(context);
11     }
12 
13     public MVideoPlayer(Context context, AttributeSet attrs) {
14         super(context, attrs);
15     }
16 
17     @Override
18     protected void setProgressAndTime(int progress, int secProgress, int currentTime, int totalTime, boolean forceChange) {
19         super.setProgressAndTime(progress, secProgress, currentTime, totalTime, forceChange);
20         //控制
21         if (currentTime==0){
22             mJumpAd.setVisibility(GONE);
23         }
24         if ((mJumpAd != null) && isAdModel && (currentTime>0) ) {
25             int passSeconds = currentTime/1000;
26             mJumpAd.setVisibility(passSeconds>=tmpCanSkip?VISIBLE:GONE);
27         }
28     }
29 }

 --------------------------------------

没有找着上传附件的地方,后期引用时,可在电脑上搜索   DemoGSYVideoPlayer.zip  

免责声明:文章转载自《GSYVideoPlayer 视频播放库》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SkylineGlobe 邻近度(Proximity)分析JavaScript源代码传奇装备物品文件名下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

java强制类型转换

在Java项目的实际开发和应用中,常常需要用到将对象转为String这一基本功能。本文将对常用的转换方法进行一个总结。常用的方法有Object.toString(),(String)要转换的对象,String.valueOf(Object)等。下面对这些方法一一进行分析。 方法1:采用 Object.toString()方法 请看下面的例子: 1 Obj...

oracle中带子查询的模糊查询案例

oracle中带子查询的模糊查询案例   select   *  from  gov_documentsendfile    where  DOCUMENTSENDFILE_TITLE like  '%'||(select   DOCUMENTSENDFILE_TITLE  from      gov_documentsendfile WHERE  DOC...

有道词典中的OCR功能:第三方库的变化

  之前有点好奇有道词典中的OCR功能,具体来说就是强力取词功能。我知道的最有名的OCR库是tesseract,这个库是惠普在早些年前开源的。   在用python做爬虫处理验证码的时候,就会用到这个库,对应的python封装版本名字叫pytesseract。在github上可以找到tesseract的源码。   不过,此前在有道词典安装之后的文件夹中,我...

URL中#号(井号)的作用

今天又看到了一篇非常好的来自HTTPWatch的文章,不得不推荐给大家。 1. 井号在URL中指定的是页面中的一个位置 井号作为页面定位符出现在URL中,比如:http://www.httpwatch.com/features.htm#print ,此URL表示在页面features.htm中print的位置。浏览器读取这个URL后,会自动将print位置...

WPF设置样式的几种方式

第一种方式是直接使用Setter来进行,可以对Background等进行设置。 <Window.Resources> <Style TargetType="Button"> <Setter Property="Background" Value="Red"/> </Style>&...

mini.DataGrid使用说明

mini.DataGrid表格。实现分页加载、自定义列、单元格渲染、行编辑器、锁定列、过滤行、汇总行等功能。Extendmini.PanelUsage <div url="../data/AjaxService.aspx?method=SearchEmployees" > <div property=...