- 博客(89)
- 资源 (2)
- 收藏
- 关注
原创 VLC播放主要流程
VLC 播放流程大概是先加载解封装器,然后通过es_out控制所有的stream。然后会加载decoder。最终通过resource文件的方法交给输出 模块。下面简要介绍。
2023-08-13 22:02:46 285
原创 VLC主要结构体
对于Android端客户端,主要是有三个c层的结构体持有数据,是LibVLC.java对应的libvlc_instance_t。Media.java对应的libvlc_media_t,以及播放器对应的libvlc_media_player_t。三个层次分别对应播放器的配置参数,多媒体信息以及播放器状态下面简要介绍一下三部分关系,主要的core初始化大概就这些,下面分析一下media的初始化。主要是通过最关键的是通过libvlc_media_new_path,拿到libvlc_media_t。
2023-08-02 23:54:22 211
原创 AudioTrack的声音输出流程
通过普通AudioTrack的流程追踪数据流。分析一下声音模块的具体流程。这里比较复杂的是binder以及共享内存。这里不做详细介绍。只介绍原理。
2023-07-10 01:10:26 382
原创 Android AudioTrack原理
Android 为了方便开发,提供了了AudioTrack接口,主要原理还是比较简单,主要是通过两个binder接口,提供线程间通讯,本质是上通过共享内存实现音频数据的传输。
2023-06-28 22:37:39 434
原创 关于android运行python程序的方法
有些时候,android需要通过爬虫拿到一些数据,但是android官方不太支持python。而python官方也不直接支持,但是python的解释器是基于c语言开发,可以比较容易的移植到android平台,目前有几个方法完成这些功能。目前简要介绍几种可以编译出python可执行文件的方法。
2023-05-18 18:13:57 1440
原创 Exoplayer源码解析3之解封装器解析
第一篇介绍了数据的加载流程,但是没有分析具体 数据如何解封装后,拿到需要的数据包,这里稍微介绍一下,本篇大部分代码都集中在extractor模块当中。
2022-09-13 00:59:11 863
原创 Exoplayer源码解析2
上一篇介绍了MediaSource的大概流程,这里里介绍一下渲染的核心部分其实就是Renderer来管理数据以及输出部分,这里只介绍音频输出。
2022-09-11 01:12:14 722
原创 Exoplayer简介
Exoplayer是一个android平台的播放器,支持格式比android系统的mediaplayer更好,确定性更好,mediaplayer是可以进行厂家定制的,各平台一致性比较差,这里简单介绍一下Exoplayer的最基础的使用接口,方便之后阅读源码。
2022-09-05 23:25:08 5402
原创 XBIC编译
前言KODI是目前4K播放器中兼容性比较好的一个播放器。并且用C++开发,代码结构比较清晰。但是为了UI跨平台,自己写了一套框架,所以二次开发还是比较苦难的,不过这里需要参考相关代码,就阅读了相关代码。正文kodi因为UI天然跨平台,和平台相关的代码比较少,所以编译整体比较简单。根据代码中的文档,一般情况下即可编译通过,不过因为一些网络问题,很容易编译出错。下面记录一下相关流程。其实核心问题就是下载第三方库。编译平台是ubuntu 20.04下载git clone https://github.c
2021-11-30 22:34:06 245
原创 android SurfaceFligure
前言前一篇文章介绍了UI显示的主要类测创建,关于显示原理本来计划再这一篇介绍的,但是android 8之后的ui显示变得非常复杂,再一两篇内不太容易介绍清楚,这篇文章只介绍一个大概流程。正文最关键的是服务端的BufferQueueProducer,这个用来管理显存数据,通过共享内存,来方便APP填充内容,这个东西非常复杂,显存是通过hal层封装的实现的,可以便于分配内存管理,通过mapper模块内存映射。这些代码都需要阅读hal层代码。得到的数据显存数据保存再layer中,因为surfacefli
2021-06-07 00:21:43 624 5
原创 SurfaceFlinger的渲染客户端Surface初始化
关于SurfaceFlinger他大部分都是三层架构SurfaceFlinger是针对整个系统,用户类本地binder服务端binderComposerServiceBpSurfaceComposerSurfaceFlingerSurfaceComposerClientBpSurfaceComposerClientClientSurfaceSurfaceControlIBinderLayer这里数据结构三层,是方便管理,一个系统只有一个Surf
2021-05-27 01:10:24 467
原创 andoridUI显示
前言Android系统大部分程序都是基于activity来实现的,所以我们UI显示都是通过xml文件生成,通过setcontetview来把页面交给phonewidow,最终交给SurfaceFlinger。因为我们相了解一下SurfaceFlinger,直接阅读activity觉得工作量比较大,也没必要,我们可以自己参考BootAnimation写一个简单的程序,作为阅读AndroidUI显示的小测试程序。正文我们自己写的程序主要包括一个main程序,代码如下:int main(){ s
2021-05-20 23:40:12 231 3
原创 android11源码编译
前言Android编译再国内其实总是会遇到各种奇怪的问题,但是想观察一下Android源码,不编译一下代码总是少点什么,虽然大部分开发系统的开发者都有开发板,所以会有芯片厂商提供的系统,但是每次都要刷机,感觉不如虚拟机好玩,当前大部分文档都是编译arm系统,大部分虚拟机无法运行,这里介绍一下内核以及aosp的编译过程正文目的是编译Android 11 源码,需要的配置是16+g内存,以及300g硬盘,系统ubunut下载Android系统代码(aosp)Android系统源码下载其实比较简单,具体
2021-05-16 20:36:44 2162
原创 BInder工作流程
前言关于binder简单使用案之前文章有所介绍,不过这篇文章只是大概介绍一下binder的工作流程正文一个binder通讯其实包括四部分内容:服务端客户端binder驱动serviceManger服务端需要注册,然后等待客户端连接,这里是业务需求,具体实现其实需要binder驱动以及ServiceManger,如果只针对通讯,ServiceManger是非必要的,不过为了服务管理以及分层(内核层不要管理framework层数据)所以产生了Servicemanger。而ServiceMan
2021-05-03 01:26:36 1473
原创 BInder
前言Binder是Android核心中的核心。Android各种服务都是通过Binder来实现进程间通讯的,我计划分三部分大概剖析一下binder的具体原理。Binder的具体使用案例源码分析大概流程实现最简单的binder正文binder是分为两部分的,一部分是服务端,通过线程池,等待其他进程通过binder驱动通知服务。另一部分是客户端,主要通过mmap函数,得到内核的内存映射区,写入数据,然后通知服务端。一个最简单的服务端如下:主要操作流程大概是Bnservice向binder
2021-05-02 02:00:19 996
原创 VLC主要流程
VLCvlc工作主要分为三个部分,input 线程读取帧数据DecoderThread 解压缩input读取的数据video_output、audio_ouput 线程把数据输出读取数据读取数据主要包括三部分,核心是两部分,一个是access,主要是直接把输入比如http服务器或者ftp或者本地文件,主要把输入源抽象成如下的结构体:struct stream_t{ VLC_COMMON_MEMBERS /* Module properties for stream fi
2021-01-23 10:08:33 617
原创 OpenGl窗口大小定位相关
前言在绘制窗口内容的时候,关于窗口的大小和绘制内容的大小事我们关注的一个重点。一般情况下这里有三个层次的初始化,分别是窗口大小,视窗大小,和绘制大小。正文窗口大小一般是在初始化的时候确认,向系统申请一个大小,一般是不收GL代码控制。视窗大小:是控制显示大小和位置的一个方法,是通过gl函数控制:glViewport最后一个是通过矩阵控制绘制内容大小,...
2021-01-21 10:12:28 720
原创 SeekBar源码分析
前言稍微读一下Seekbar的源码,了解一下具体实现。正文seekbar的父控件是ProgressBar,这个比较简单,大概基本就是一个把一个drawable在ondraw中给draw一下,onmesure则基本上是根据maxheight或者minheight来确定大小。无论是drawable或者是maxheight、minheight都是通过style中定义的,我们看下系统的一个styl...
2019-10-22 11:21:20 505
原创 tomcat 源码部分分析
前言最近想分析一下网络请求的一些东东,okhttp大概核心部分的那个连接池看着实在让人肝颤。就想着读一个网络后台的程序,本来准备读nginx。主要网络请求部分基本分析清楚,但是http的URL处理以及解析读着就比较蛋疼了,特别是为了一些长的URL和body等等,包括socket数据的拼接等。读着那c语言,最终还是放弃了。所以就转头读一读tomcat,毕竟tomcat不那么在意性能嘛!大概看了下,...
2019-08-11 23:38:47 206
原创 集合
根据需求一共有这么几种东东:ListMapSetDictionaryQueueList这个用的最多,就是一个有序的列表Map key-value 对set 无序列表Dictionary 完全可以被Map替代Queue 队列实现所有的实现都是基于数组或者链表实现的,或者数组+链表 链表+数组链表插入删除速度快,数组查询快省内存List包含子类有:Abst...
2019-06-06 00:15:56 114
原创 手写最简handler
前言最近阅读Android 源代码,就想着写个最简单的Android线程间通讯的方案。这里主要是还粘贴写的代码正文循环等待的核心loop函数:looper.javapublic class Looper { private long ptr; private Message m; public Looper(){ ptr = Init(); ...
2019-04-05 20:00:37 188
原创 Android 线程间通讯机制
前言之前研究Fragment遇到进程间通讯的一些东东,趁着最近有空,就在重新研究一下Android相关的代码。并且这些代码确实非常简单。之前研究过,但是遇到一些问题就没深究,这次我们就彻底搞懂他吧正文最简单的使用当然是在activity的oncreat中直接使用:Handler handler = new Handler();handler.post(new runable{ Log....
2019-04-04 15:19:58 257
原创 Fragment生命周期源码分析
前言上一篇介绍了Fragment的新建过程,这一篇我们介绍一下Fragment的生命周期源码的过程,这里我们假设的情景是fragment已经添加到页面上了,通过上一篇我们知道Fragment其实就是activity的一个成员变量,用来提供一个view,所以Fragment的生命周期肯定是activity控制的(其实activitymanageservice也可以控制,但是完全没必要那么复杂),所...
2019-04-02 00:06:46 550 3
原创 完全分析okhttp职责链职责
前言之前分析了okhttp的流程,具体的真正的http的请求没做,这里我具体分析到底是如何做到从一个字符串的地址请求到一个完整的html文档的。正文这里我们分析最简单的情况是http请求,而不是加密的https通讯协议。如果想读懂这个代码最好要了解整个okhttp的流程,可以读上一篇文章。首先是RetryAndFollowUpInterceptor这个大概是处理异常,但是有个最关键的环节...
2018-10-19 00:11:35 180
原创 okhttp源码解析
##前言http请求的功能应该是很简单,只是为了鲁棒性和性能需要写很多的代码,发现okhttp还是挺复杂的,但是我们这里还是要好好的搞定他。##正文我们从最简单的使用开始OkHttpClient client = new OkHttpClient();Request request = new Request.Builder() .url(url) .bu...
2018-10-16 18:31:25 114
原创 gson完全解读
##前言网络请求框架一直没搞,这个东西一直是我的一个遗憾。最近用到这里我们好好的研究下,本篇博客主要研究一下gson相关的东西。##正文gson是什么:A Java serialization/deserialization library to convert Java Objects into JSON and back 发现看不懂,只能才懂大概意思是就是把java对象和JSON相...
2018-09-27 00:20:19 1443
原创 Carbon-Forum 源码走读
前言工作需要写一个简单的网站,就学习了下PHP,读了一套小型的论坛网站的代码,这里通过博客记录一下这几天的工作过程。正文首先是选择变成语言,虽然我懂Java,可是PHP这类脚本语言的入门不会太久,并且对于web开发,PHP市场占有率貌似达到百分之八十多,有问题也便于解决,所以呢,我们就选择了PHP。关于小型的论坛网站,在github上找了几个,貌似有比carbon小的,但是因为版本问题...
2018-08-01 00:20:15 1217
原创 Android NDK编译原理
前言做Android APP开发,可以基本不用care java的编译过程,java的依赖关系,并且现在Android studio也已经支持了cmake开发,也就是说大部分情况下,就不用关心系统是如何编译的,不过对于想要用以一些第三方库,这就需要对整个编译框架有所了解了,并且这个东东还是很简单的。正文Android APP jni 编译控制有四种主要的编译控制系统,Andr...
2018-05-21 12:30:52 1261
原创 openjdk梳理
前言最近想提高一下Java基础知识,java基本功能都差不过掌握了部分,实在没找到好的办法再来提高,就研究一下java的一些源码。希望可以提高一下,了解一下java一些类的原理,以及javac,java原理。这里没有详细计划,只是了解一下大概流程,我也没能力完全阅读完openjdk的源代码。正文阅读源码部分,因为Android开源其实对于java的阅读,读Android中的源码也可以,...
2018-04-26 00:17:45 192
原创 Git搭建服务器以及日常使用
前言前几天格式化了硬盘,忽然觉得版本管理还是灰常重要的,所以这几天就重新学习了一下Git.这里我们记录下服务器配置以及基本的操作。关于分支管理这些git的灵魂工作,这里我暂时不详细介绍,这里我的git只是作为版本管理工具,并且只是服务一个人。正文git配置有两套方案,一套是gitlab,这种搭建一个私人的github网站(可以部署到虚拟主机或者局域网上),但是呢对电脑配置要求比较高...
2018-04-24 19:11:22 384
原创 Gradle源码分析
前言因为之前一直做Android开发所有的东西都是IDE给做了,只知道配置一下基本的依赖。静静等待神奇的apk文件生成,这给在学习心得语言比如kontlin或者了解一下相关东西的时候造成巨大的困难,所以下定决心,在重新搞一下Gradle。可是gradle相关资料都是面对特定编译场景的。很难完全通过文档和demo了解所有用法,这里我们还是通过梳理源码流程。梳理一下gradle的脉络,了解支持什么...
2018-04-12 17:47:51 2315 2
原创 opencv解码框架源码走读
前言之前都是使用的最基本的代码,不过那些都是招式。我们追求的往往都是内功。以后我们就开始我们的 内功修炼吧。正文我们最开始的helloworld,用来显示一张图片,这里我们就从这里入手。当然我们那一篇的代码第一句是 Mat img = imread("pic.jpg"); 我们就从这里开始。 首先是Mat这个类不太很复杂,不过我们这里不打算详细介绍,我们只要知道这个,类可以保
2018-01-23 01:02:40 616
原创 opencv的像素遍历和基本的矩阵处理
前言opencv的所有数据都是以一个mat存储的,可是我们需要对各个像素处理,这里必须高效的对像素快速的循环遍历,而矩阵对于像素的处理也具有得天独厚的优势。在这一篇博客中我们慢慢的学习一下。正文对于mat的循环便利也比较简单我们首先最容易想到的方法是:Mat& ScanImageAndReduceC(Mat& I){ // accept only char typ
2018-01-18 00:54:11 1319
原创 opencv系列
前言自从五月份换了一个工作,也仅仅写了一个APP,然后看了一个leveldb源代码,仅仅看了部分,具体关于内存操作的部分,还跳过去了,live555这套代码的核心部分,也就是视频的编解码部分,也不是很透彻,ffmpeg更是内容根本没有详细看,仅仅了解下调用接口罢了,对Linux的编译环境也花了一段时间进行了了解(因为我一直喜欢Linux,并且在看ffmpeg过程中,对编译环境-makefile
2018-01-16 01:58:14 987 2
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人