• GSYVideoPlayer 视频播放库


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

    官方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)

          

    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  

  • 相关阅读:
    C#过滤重复数据,使用泛型
    office2007:您正试图运行的函数包含有宏或需要宏语言支持的内容。而在安装此软件时,您(或您的管理员)选择了不安装宏或控件的支持功能
    InstallShield高级应用获取本机所有的SQL服务
    结对项目
    ActiveMQ 初学1:ActiveMQ 创建连接对象
    【JVM】jstack和dump线程分析(2)
    【JVM】jstack 查询占用最大资源线程|排查死循环等
    【java多线程】volatile 关键字
    1.zookeeper原理解析数据存储之Zookeeper内存结构
    【数据算法】Java实现二叉树存储以及遍历
  • 原文地址:https://www.cnblogs.com/jieling/p/15189823.html
Copyright © 2020-2023  润新知