Android应用开发之Android播放器基础学习之封装库playerBase实例讲解
凌雪 2018-09-20 来源 :网络 阅读 405 评论 0

摘要:本文将带你了解Android应用开发之Android播放器基础学习之封装库playerBase实例讲解,希望本文对大家学Android有所帮助。

本文将带你了解Android应用开发之Android播放器基础学习之封装库playerBase实例讲解,希望本文对大家学Android有所帮助。


简述
      视频播放是我们开发中比较常见的场景。这两年关于视频方面的热度不断提升,可以说前两年是直播年,今年是小视频年,各种短视频应用铺天盖地。对于视频的业务场景也越来越丰富,功能也越来越多。对于我们开发来说播放相关组件的代码变得也越来越复杂,管理维护成本也越来越高,面对不断迭代的业务,我们需要一种有效的方案来应对这种频繁的业务变化。
    这几年一直在做视频相关的业务,手机端和TV端均做过适配开发。MediaPlayer、exoplayer、ijkplayer、VLC、FFmpeg等都摸索使用过。这一路遇到很多问题……说多了都是泪,为了适应多变的产品需求,中间重构了N多个版本。最终PlayerBase也就诞生了。PlayerBase3   版本进行了完整重构设计,目前大致框架基本已稳定下来。对于大部分应用视频播放组件场景都能轻松处理。
    P图技术有限,文中图片就凑合着看吧!
    框架简介
    请注意! 请注意! 请注意! PlayerBase区别于大部分播放器封装库。
    PlayerBase是一种将解码器和播放视图组件化处理的解决方案框架。您需要什么解码器实现框架定义的抽象引入即可,对于视图,无论是播放器内的控制视图还是业务视图,均可以做到组件化处理。将播放器的开发变得清晰简单,更利于产品的迭代。
      PlayerBase不会为您做任何多余的功能业务组件,有别于大部分播放器封装库的通过配置或者继承然后重写然后定制你需要的功能组件和屏蔽你不需要的功能组件(这种之前我也经历过,上层可能需要经常改动,感觉很low!!!)。正确的方向应该是需要什么组件就拓展添加什么组件,不需要时移除即可,而不是已经提供了该组件去选择用不用。
     功能特色
    视图的组件化处理
    视图组件的高复用、低耦合
    解码方案的组件化、配置化管理
    视图组件的完全定制
    视图组件的热插拔,用时添加不用时移除
    自定义接入各种解码方案
    解码方案的切换
    支持倍速播放
    支持Window模式播放
    支持Window模式的无缝续播
    支持列表模式的无缝续播
    支持跨页面无缝续播
    支持调整画面显示比例
    支持动态调整渲染视图类型
    支持VideoView切角处理,边缘阴影效果
    提供自定义数据提供者
    统一的事件下发机制
    扩展事件的添加
    等功能……
    部分使用示例
    解码配置和框架初始化
    public class App extends Application {
        @Override
        public void onCreate() {
            //...
            //如果您想使用默认的网络状态事件生产者,请添加此行配置。
            //并需要添加权限   android.permission.ACCESS_NETWORK_STATE
            PlayerConfig.setUseDefaultNetworkEventProducer(true);
            //设置默认解码器
            int defaultPlanId = 1;
            PlayerConfig.addDecoderPlan(new   DecoderPlan(defaultPlanId, IjkPlayer.class.getName(),   "IjkPlayer"));
    PlayerConfig.setDefaultPlanId(defaultPlanId);
            //初始化库
            PlayerLibrary.init(this);
        }
    }
    组装组件(添加您需要的组件【组件来自用户自定义,框架不提供任何视图组件】)
    ReceiverGroup receiverGroup = new ReceiverGroup();
    //Loading组件
    receiverGroup.addReceiver(KEY_LOADING_COVER, new   LoadingCover(context));
    //Controller组件
    receiverGroup.addReceiver(KEY_CONTROLLER_COVER, new   ControllerCover(context));
    //CompleteCover组件
    receiverGroup.addReceiver(KEY_COMPLETE_COVER, new   CompleteCover(context));
    //Error组件
    receiverGroup.addReceiver(KEY_ERROR_COVER, new ErrorCover(context));
    设置组件启动播放
    BaseVideoView videoView = findViewById(R.id.videoView);
    videoView.setReceiverGroup(receiverGroup);
    DataSource data = new DataSource("https://url...");
    videoView.setDataSource(data);
    videoView.start();
    事件的监听
    //player event
    videoView.setOnPlayerEventListener(new OnPlayerEventListener(){
        @Override
        public void onPlayerEvent(int eventCode, Bundle   bundle){
            //...
        }
    });
    //receiver event
    videoView.setOnReceiverEventListener(new OnReceiverEventListener(){
        @Override
        public void onReceiverEvent(int eventCode, Bundle bundle)   {
            //...
        }
    });
    详细使用示例请参阅github项目主页介绍    

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注移动开发之Android频道!

本文由 @凌雪 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程