首页
学习
活动
专区
圈层
工具
发布

04.视频播放器通用架构实践

00.视频播放器通用框架 基础封装视频播放器player,可以在ExoPlayer、MediaPlayer,声网RTC视频播放器内核,原生MediaPlayer可以自由切换 对于视图状态切换和后期维护拓展...迭代到后期,违背了开闭原则,视频播放器需要做到和业务分离 视频播放器结构不清晰 这个是指该视频播放器能否看了文档后快速上手,知道封装的大概流程。方便后期他人修改和维护,因此需要将视频播放器功能分离。...02.业务需求的目标 常见的业务需求 基础封装视频播放器player,可以在ExoPlayer、MediaPlayer,声网RTC视频播放器内核,原生MediaPlayer可以自由切换 对于视图状态切换和后期维护拓展...,播放完成,播放准备,播放size变化,还有播放准备 播放器的核心实现要点 针对上层播放器业务,该内核库提供统一的播放暂停,设置播放状态的接口,由于播放器内核和播放器业务解耦合,所以非常方便快速添加其他...快速添加基础视频播放器的模块,包括视频播放完成view,播放异常view,播放top视图view,播放底部控制蓝view,手势滑动视图view等。

3.1K00
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    壹二APP开发实践回顾总结出40条精要

    它包括相同的 ProGuard 规则,但还包括其他在字节码一级(方法内和方法间)执行分析的优化,以进一步减小 APK 大小和帮助提高其运行速度。...另外 CardView 阴影效果实现机制不一样,这个导致在5.0前后是有差异性的; 17、 友盟的QQ分享 需要记得替换,不然回调异常; 18、RecyclerView 未设置 LayoutManager...26、 Glide 和 CircleImageView配合使用的时候,不能设置渐变动画。 27、友盟分享或者就是QQ的分享,需要有外设读写权限,不然分享失败,而且,这个失败异常回调不在主线程。...()' is inaccessible to class 'com.google.firebase.iid.zzg',说到底,这个还是集成版本太旧的问题,如何解决呢?...链接 29、 RecyclerView 更新数据如果有动画的话,那么应该先清除所有的数据,再添加新的数据,不然动画效果和以前的列表会同时出现,特别诡异。

    1.1K40

    JankStats 推出 alpha 版本

    卡顿 (名词): 指应用性能糟糕,可能导致丢帧、界面动画不连贯和用户体验不佳等问题。请参阅 "不开心的用户" 词条。 性能问题很难调试。...所有这些工具均针对开发期间的测试设计,用于帮助您调试和修复在本地运行时发现的问题。...同时,Google Play 的 Android Vitals 和 Firebase 均提供信息中心,供开发者了解其应用在实际用户设备上的运行情况。...当 RecyclerView 开始移动 (被 "拖动") 以及 RecyclerView 开始自由滚动 (被 "放置") 时,我们可在开始之前看到与界面状态相关的信息 (仅列出 Activity 状态)...例如,您可能想知道,某个特定的 Activity 或 Fragment 在何时处于活动状态,或 RecyclerView 何时处于滚动状态。

    1.3K60

    recycleview的优化_recyclerview原理

    的区别和联系,RecyclerView的绘制流程有一定了解,再来谈RecyclerView的性能提升。...具体实现方式是:在 RecyclerView 开始一个滚动时new Runnable对象,根据 layout manager 和滚动的方向预取即将进入视野的条目,可以同时取出一个或多个条目,例如在使用...注意:setHasStableIds()必须在 setAdapter() 方法之前调用,否则会抛异常。...(true),是支持嵌套滚动的,也就是说当它嵌套在NestedScrollView中时,默认会随着NestedScrollView滚动而滚动,放弃了自己的滚动。...本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

    5K21

    项目需求讨论- 自定义滚轮(第二波新实现)

    而且如果你手指快速的滑动,不停的滚动,你就会滑到顶部的位置。因为我们的是ScrollView 最后选中哪一项,才让它滚动到中间相应的那一项。 那有些人可能会说,那我就不只弄这几组。...别人快速滑动也滑不到顶部了。Too young Too Simple。比如我用11组。但是你会发现,你的界面加载直接很久很久,因为ScrollView内的控件都直接要初始化好,因为你设置了11组。...因为比如我们建立一千组一万组数据,我不需要考虑要重新滚回中间,问题1和2就解决了。问题3因为RecyclerView 的特性,也被解决了。是一个很理想的循环滚动的滚轮。...---- 原理分析 滚轮的高度和Item的高度 比如我们确定一个页面显示5项,item的布局高度为100dp,那滚轮高度就设定为500dp....但是结果是不会滚动,原来这个方法当我们的Position + 1已经出现在屏幕上了。不管是不是第一个,不管处于屏幕的哪个位置,这个RecyclerView就不会滚动。我忍不住又一句 WHF!!。

    1.3K20

    Android必知必会 - RecyclerView 恢复上次滚动位置

    记录 RecyclerView 滚动位置并恢复是一个很常见的需求,通常需要精准恢复到上次的位置。...预计会用到 RecyclerView 相关的三个知识点: 监听 RecyclerView 滚动状态 监听 RecyclerView 完成绘制 滚动 RecyclerView 到指定的位置 思路: 在「RecyclerView...,记录最左侧的元素坐标和偏移量; 再次打开当前页面时,检查是否存在偏移量信息的记录,有则进行位置恢复,即「滚动 RecyclerView 到指定的位置」。...水平,本文以此为例 linearLayoutManager.setOrientation(LinearLayoutManager.VERTICAL); //或 垂直 //以下3个变量的值需要持久化存储到...前置知识 监听 RecyclerView 滚动状态 调用 recyclerView.addOnScrollListener(onScrollListener); 来设置 RecyclerView 的滚动监听器

    2.4K20

    手把手教你打造RecyclerView滚动特效

    效果图 最近开发中遇到这样的需求,recyclerview的item随滚动改变大小和透明度。这个效果看起来挺有动感的,似乎实现起来有点复杂,其实不然,接下来将带领大家手把手实现这个效果。...列表滑动效果 这是我用简书的Markdown代码块语法实现的仿RecyclerView列表的效果,基于这个效果我想到将侧边栏的滑块和RecyclerView的Item结合起来,与动画的process变量相关联...总高度(包含不可见部分)与RecyclerView可见部分的高度相差得到;而scrollY则随着RecyclerView的滚动变化,因此需要对RecyclerView进行滚动事件的监听: recyclerView.addOnScrollListener...的滚动建立了关系;至此,动画与RecyclerView的逻辑关系梳理完毕。...Not 3联发科版系统(不得不说这个系统真的很渣,亲测体验)上运行未出现异常。

    3.2K10

    企鹅FM(Android) 播放成功率从 2 个 9 到 3 个 9 的蜕变

    除MediaCodec以外是 完善,所有错误都通过java层异常抛出,直接转化成对应处理逻辑或者业务层错误码 中 注:这里的接入层指的是为了实现完整的业务逻辑,在播放器内核外围的逻辑层 换ExoPlayer...于是当发现ExoPlayer能够很完善解决这两个问题的时候,我们就进行了替换 得益于ExoPlayer高度可扩展的特性,我们去除了本地代理模块,将分片加载和缓存以及音频的变速和特效处理模块直接集成进来...,砍掉了很多冗余的通信 而且采用了ExoPlayer以后去除了大部分的C/C++层逻辑,剩下的jni通信基本都属于系统组件,譬如MediaCodec和AudioTrack,对于实现者来说可以当做透明,目前日登陆百万的用户量来看...其他的补充手段 仅仅靠换播放器内核和重新设计业务逻辑接入是没法做到极致的,这里还针对点播和广播(HLS)做了一些额外的优化 ExoPlayer是通过抛异常来上报各种播放错误的,起初我们把全部的异常都算在播放错误中...MediaExtractorPeriod和HlsMediaChunk的cancelLoadable()方法都没有调用dataSource的close()方法,这里我们加上了这个调用,原因在于快速切换节目时

    4.1K01

    Android RecyclerView八个必会的面试技巧

    参考简答:RecyclerView相较于ListView的优势在于: 灵活性: RecyclerView通过定制化的布局管理器、适配器和动画效果,允许开发者更灵活地定制列表布局和外观。...LayoutManager测量和布局: RecyclerView会通知LayoutManager进行测量和布局,确定每个ItemView的位置。...scrollVerticallyBy、scrollHorizontallyBy: 处理垂直和水平方向上的滚动事件,根据滚动距离调整ItemView的位置。...Recycler池中维护了一个可回收的ViewHolder队列,通过这个池来快速获取可重用的ViewHolder。...Scrap缓存: 在RecyclerView内部还有一个Scrap缓存,用于存储一些没有被完全废弃的ItemViews。这个缓存用于快速重用视图,减少了ViewHolder的创建和初始化时间。

    77920

    Android经典面试题之RecycleView 深度解析与面试题梳理

    架构概览 RecyclerView 通过以下组件协同工作来实现高效的数据展示: **RecyclerView**:核心容器,负责整体的布局管理和滑动事件。...用户滚动 RecyclerView 时,LayoutManager 会计算哪些项应该显示在屏幕上,并决定哪些项可以被回收复用。...滑动优化 RecyclerView 通过以下机制优化滑动性能: 预加载(Prefetch):在用户滚动时,RecyclerView 会预先加载一些项,以便快速显示。...RecyclerView 的性能优化 预加载:通过 RecyclerView 的 setOnScrollListener 方法,可以实现预加载机制,预先加载用户可能滚动到的项。...结语 RecyclerView 是 Android 开发中处理列表和网格布局的强大工具,它通过一系列优化机制提供了高性能的滑动体验和高效的内存管理。

    80710

    Fragment 知识梳理, FragmentPagerAdapter ,RecyclerView 知识梳理,sharepreference,IntentService,service交互

    the view 这三大组件各司其职,而RecyclerView负责管理,就组成了整个RecyclerView的架构。...Scroll 对于滚动事件的处理,RecyclerView负责接收事件,但是最终还是由LayoutManager进行处理滚动后的逻辑,因为只有它在知道View具体摆放的位置。...Adapter需要负责以下几部分的工作: 创建View和ViewHolder,后者作为整个复用机制的跟踪单元。 把具体位置的Item和ViewHolder进行绑定,并存储相关的信息。...当我们对同一个AsyncTask实例调用execute(..)时,如果此时已经有任务正在执行,或者已经执行过任务,那么会抛出异常。 在onPreExecute()执行时,任务还没有被加入到队列当中。...持久化存储了。

    16900
    领券