自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(25)
  • 收藏
  • 关注

原创 插件复用宿主平台代码方案

ClassLoader 双亲委派, 子ClassLoader 加载class 文件,首先会委派自己的父ClassLoader去加载。关于ClassLoader其他细节这里不做过多介绍。, 实际业务开发过程中第三方插件页面可能需要向平台提供一些埋点统计信息。

2024-01-12 13:17:33 373

原创 Exoplayer强制切硬解码优化

视频渲染器会调用到从下面的图片我们可以看到,android系统会提供硬件厂商的解码器(c2.mtk.avc.decoder) 和系统自身默认解码器(c2.android.avc.decoder)其中c2.mtk.avc.decoder 是硬解码器,解码效率较高,c2.android.avc.decoder 是软解码器,效率相对硬解码器较低, 从源码断点分析,Exoplayer在解码器初始化的时候,并不会强制使用硬解码器,而是随机选择软解和硬解码器。

2023-12-22 19:08:58 994

原创 Exoplayer无缝开播优化

无缝开播的思想是。

2023-12-22 10:14:54 651 1

原创 LottieAnimationView 缓存机制和优化

Lottie内存优化主要分为对LottieAnimationView 内存开关的设置和 LottieCompositionCache 操作两种方式。

2023-12-21 21:13:19 1075

原创 Exoplayer(10)-MediaCodec配置和初始化过程

在Exoplayer(9)-视频渲染器工作流程 我们了解到视频渲染器在初始化时会配置和初始化MediaCodec,本篇内容主要梳理MediaCodec 配置获取和MediaCodec初始化过程。

2023-12-21 17:22:55 515

原创 Exoplayer(9)-视频渲染器工作流程

前面Exoplayer架构介绍中,我们知道Exopalyer在启动后会启动Renderer 对音视频数据进行渲染,本篇我们主要来梳理一下视频渲染器的工作流程。

2023-12-21 16:18:18 446

原创 Exoplayer(8)-Extoractor解析数据和缓存到内存

前文我们讲到了Exoplayer数据源打开过程, 媒体数据流链接建立好之后会对数据流解析媒体格式解析, 本文我们主要讲Extrator解析和读取数据的六层。

2023-12-21 16:02:53 414

原创 Exoplayer(7)-Extractor初始化

前文我们讲到了Exoplayer数据源打开过程, 媒体数据流链接建立好之后会对数据流解析媒体格式解析, 本文我们主要讲Extrator的初始化过程。流媒体有多种格式(HLS, MP4, FLV, MP3等) 这里以MP4为例。

2023-12-21 15:42:50 433

原创 Exoplayer(6)-Exoplayer数据源打开过程

【代码】Exoplayer(6)-Exoplayer数据源打开过程。

2023-12-21 15:31:34 361

原创 Exoplayer(5)-音视频数据源设置过程

【代码】Exoplayer(5)-音视频数据源设置过程。

2023-12-21 15:04:32 417

原创 Exoplayer(4)-Exoplayer启动和轮询流程

【代码】Exoplayer(4)-Exoplayer启动和轮询流程。

2023-12-21 14:46:24 514

原创 Exoplayer(3)-Exoplayer架构介绍

1.1 寻找已经设置给Exoplayer的播放源(MediaSource), 打开播放源,读取媒体流。Exoplayer 在prepare() 后会开启一个定时轮询,执行下面的行为。如果没有打开渲染器Renderer(视频,音频,文字等渲染), 打开渲染器。校验各种条件,设置播放状态。

2023-12-21 14:19:23 419

原创 Exoplayer(2)-Exoplayer的优缺点

性能Exoplayer 相对于Ijkplayer 总体性能偏低,对低端设备不友好。业务接口比较完善,适合播放开发人手不足,对播放极端播放性能要求不高的团队。

2023-12-21 14:11:33 810

原创 Exoplayer(1)-简介

ExoPlayer库的核心是Exoplayer接口,Exoplayer公开了传统的高级媒体播放器功能,例如缓冲媒体、播放、*TrackSelector:轨道提取器,从MediaSource中提取各个轨道的二进制数据,交给Render渲染。*LoadControl:可以控制MediaSource,比如什么时候开始缓冲,缓冲多少之后暂停缓冲。暂停和seek等功能,ExoPlayer通过组件实现替他高级功能。*MediaSource:定义多媒体数据源,从Uri中读取数据,传入ExoPlayer。

2023-12-21 14:07:59 338

原创 第三方页面混合嵌入平台的插件化动态方案

(2)View的创建,资源的获取会大量使用到Context, 通过下面的代码我们可以看到Fragment获取Context使用的是mHost.getContext(), 实际访问的是宿主的Context, 这样会导致不安全问题,所以需要解决Fragment 中Context访问,解决潜在的安全问题。插入宿主的Fragment会被宿主Activity注入上下文Context,导致访问宿主的资源,需要动态注入插件上下文Context, 解决资源访问问题。(1)插件中native代码的如何加载。

2023-12-20 18:50:23 456 1

原创 AQS源码分析(一) 独占锁获取

AQS独占锁获取AQS实现核心state等待队列CAS核心成员变量ReentrantLock lock()实现AQS 独占锁获取acquire()代码如下:tryAcquire()AQS实现核心state同步器有一个state,它代表着当前同步器的状态,它是整个AQS的核心属性。我们平时使用的JUC框架下的常用类比如ReentrantLock,其实它们的方法就是在设置和改变这个state。而之前说的子类需要实现的方法,简单的说,它的实现逻辑也就是在设置和改变这个state。等待队列AQS中已经为我

2020-09-20 21:33:31 95

转载 2020-09-20

AQS深入理解系列(一) 独占锁的获取过程 anlian523 2020-06-03 00:03:19 ...

2020-09-20 18:35:19 199

原创 ThreadLocal 源码分析

ThreadLocal 设计思想每个线程Thread实例中都会存在 ThreadLocalMap对象,ThreadLocal 对数据进行存取是会首先获取当前线程。从线程中取出ThreadLocalMap对象,然后对操作域操作。 这样就实现了线程之间的数据隔离。保证数据安全。Synchronized和Lock用于线程间的数据共享通信,而ThreadLocal则用于线程间的数据隔离。所以ThreadLocal的应用场合,最适合的是按线程多实例(每个线程对应一个实例)的对象的访问,并且这个对象很多地方都要用到

2020-09-20 18:23:14 67

原创 JUC AtomicInteger源码分析

AtomicInteger性能简介AtomicInteger类通过volatile语义加上CAS操作,使得对AtomicInteger的操作实现了一种非阻塞同步,从而保证了线程安全。非阻塞在于它没有使用synchronized或者Lock,而是循环加CAS,既然是循环执行,那么肯定没有阻塞线程,也就没有切换线程所带来的消耗AtomicInteger属性 //获取Unsafe实例 private static final sun.misc.Unsafe U = sun.misc.Unsafe.getU

2020-09-20 17:07:30 94

原创 VirtualApk 源码解析(一) 插件化技术原理

1概述VirtualApk 进行了Framework层的hook, github地址如下:VirtualApk 地址 https://github.com/didi/VirtualAPK插件化技术最初源于免安装运行 apk 的想法,这个免安装的 apk 可以理解为插件。支持插件化的 app 可以在运行时加载和运行插件,这样便可以将 app 中一些不常用的功能模块做成插件,一方面减小了安装包的大小,另一方面可以实现 app 功能的动态扩展。想要实现插件化,主要是解决下面三个问题:插件中代码的加载和与

2020-09-06 19:22:41 303

原创 LinkedList源码分析

1元素的存储结构在LinkedList中,每一个元素都是Node存储,Node拥有一个存储值的item与一个前驱prev和一个后继next,如下:// 典型的链表结构private static class Node<E> { E item;// 存储元素 Node<E> next;// 指向上一个元素 Node<E> prev;// 指向下一个元素 Node(Node<E> prev, E element, Node&l

2020-09-03 23:08:42 73

原创 HashMap源码分析 Java1.8

1 HashMap简介Map是Key-Value对映射的抽象接口,Map用于保存具有映射关系的数据。Map集合里有两组值,一组值用于保存Map里的key,另外一组值用于保存Map里的value,key和value都可以是任何引用类型的数据。key不允许重复,key和value之间存在单向一对一关系,通过key能找到相应的value。HashMap是基于哈希表的Map接口的实现,以Key-Value的形式存在,即存储的对象是Entry(同时包含了Key和Value)。在HashMap中,根据hash算法来

2020-08-31 23:03:11 65

原创 ArrayList源码分析 Java1.8版本

ArrayList源码分析 Java1.8版本1 ArrayList的数据结构ArrayList底层的数据结构就是数组,数组元素类型为Object类型,即可以存放所有类型数据。ArrayList类的实例的所有的操作底层都是基于数组的。2 ArrayList源码分析2.1 ArrayList继承结构和层次关系ArrayList的继承结构和层次关系诶下图所示 :1 AbstractList是实现接口中一些通用的方法,而具体的类, 如ArrayList就继承这个AbstractList类,拿到一些通用

2020-08-29 18:39:45 127

原创 x264_slicetype_analyse函数

x264_slicetype_decide函数(代码所在位置为“x264-snapshot-20171128-2245-stable\encoder\slicetype.c”)的主要作用为:真正用于分析帧类型(I\P\B帧)调用顺序如下:x264_encoder_encode —> x264_lookahead_get_frames —> x264_slicetype_decide...

2020-02-09 16:58:58 345

原创 BlockCanary源码分析

BlockCanary源码分析概述特点原理和思想Looer.loop()LooperMonitor卡顿信息打印BlockCanary几个核心结语概述BlockCanary是Android平台上的一个轻量的,非侵入式的性能监控组件,可以在使用应用的时候检测主线程上的各种卡顿问题,并可通过组件提供的各种信息分析出原因并进行修复。特点BlockCanary对主线程操作进行了完全透明的监控,并能输...

2020-01-04 17:23:52 89

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除