自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

jackzhouyu的专栏

Linux学习

  • 博客(213)
  • 资源 (12)
  • 问答 (1)
  • 收藏
  • 关注

原创 音频可视化算法demo

音频可视化

2024-02-01 10:42:14 373

原创 谨慎使用android.view.SurfaceView.setVisibility方法

原因就是此方法会导致native的内存暴增,前提条件你使用surfaceview去绘制一些复杂的3D图形,绘制复杂、业务复杂的场景;setVisibility方法会调用surfaceView的updateSurface,而此方法内部就可能会分配大量的native内存。

2023-12-01 11:54:20 435

原创 如何从日志中快速定位Android系统重启?

同样的userId为u0,且为它启动了2次,明显就重启了;可以查看两个时间点的日志确定重启原因。一般来说系统重启都是zygot被干掉了,发送了9就是kill信号,杀掉孵化进程自然就重启了。

2023-10-26 10:24:53 285

原创 音频编码类型及对应的封装文件

如下表格。

2023-08-22 16:13:08 1108

原创 矩阵定理复习记录

也就是对A*y的矩阵,求偏导y,结果为A的转置矩阵;若A是一个对称矩阵,也就是。这部分的推导过程可参考。

2023-08-10 17:34:13 407

原创 AOSP构建、编译基础理解

参考这篇文章,写的比较好,我就不狗尾续貂了!

2023-05-19 14:21:51 1419 4

原创 音频焦点使用及原理

因为实际上就是通过这种流程触发的,假如我们第一个音乐App申请焦点成功后,在播放音乐music,此时它的FocusRequestor位于FocusStack栈顶,此时若有电话接入,电话App应用会申请音频焦点,电话App会位于FocusStack的栈顶,而music的app在电话App的下面,就会触发对于音乐App失去焦点的回调,当然还有其他焦点触发变化的情况,此处解释就是上述流程图的。这里主要分析上节的2和3步骤,申请焦点与焦点回调两个过程,在framework中是如何运作的?

2023-05-06 14:56:23 1778

原创 Android Audio音量设置原理流程分析

在改变音量时或插入耳机设备时,防止音量突变过大,对人耳造成伤害;如手机上music的音量设置到最大值,当我们插上耳机戴上时,如果音量仍不变保持最大输出,听力可能会受损,这时这个安全音量设备就其作用了,插入耳机时音量值变为安全音量值,保护我们的听力。以上代码关键理解点在于return这句,srcRange代表srcStream可调整的音量等级范围,假如[1, 10],同理dstRange,有可能是[10, 20],如传入的srcStream的index音量等级是5,对应到dstStream是都少呢?

2023-04-11 20:43:44 4079

原创 MediaPlayer框架总结

在GenericSource中,FileSource是与本地音视频文件直接连接的一个类,而MediaExtractor则是不同类型音频的解析类,如wav、mp3、midi等多达十多个的解析解析类,不同的音频文件会创建不同Extractor类,但是他们都集成MediaExtractor,拥有统一的操作API接口,而这些Extractor类使用类似链式的模式,最后都指向FileSourece,逐级解析音频,拿到文件里面的metaData元数据以及音频数据。暂用一幅图总结,待后续有时间了在细细补充;

2023-03-24 10:17:07 346

原创 记录Android Audio学习中的疑问

本文记录博主学习Audio时的问题

2023-03-08 18:40:47 902

原创 Android Studio自带模拟器卡死问题解决

Studio自带的模拟器很方便,不用安装其他的插件即可运行,但是经常会莫名其妙的点不动、卡死,把它杀掉后、重启Android Studio还是一样的结果;

2023-02-20 09:36:46 2578 5

原创 记录一次内存调优实战

adb monkey压力测试App的拍照功能,发现内存持续升高,GC后仍缓慢持续升高,基于此,分析其背后的原理!

2023-02-07 11:13:00 258

原创 Android trace文件分析小技巧

网上有很多trace文件分析博客,但是都是解释anr发生得原因,没有指导anr文件如何着手分析?本篇文章就是讲trace文件怎么切入?

2022-10-24 11:02:10 3359 4

原创 widget使用setImageViewBitmap方法设置bug分析

在widget里面,Imageview设置bitmap时,通常可以使用更新ImageView,使用此方法容易引起以下问题:从以上错误日志分析大致意思就是,AppCompatImageView不能在RemoteViews里面使用setImageBitmap这个方法可是why?remoteViews明明提供了setImageViewBitmap,现在又说不能用method实质就是ImageView的setImageBitmap方法,klass.getName()理论上应该返回的是ImageView,因为

2022-06-22 22:11:01 895

原创 Android Audio混音实践篇

Android Audio混音实践篇简介本篇文章主要介绍Android Audio模块的MixerThread混音业务如何实现的?建议在阅读这篇文章之间先阅读混音理论基础篇,并且在分析源码之前:头脑里构想一个大致的混音过程,多路音频AudioTrack叠加在一起进行混音,多路音频混音的是数据对象是pcm数据,它如何叠加,混音后的音量又是如何处理?首先回忆一下单路AudioTrack的音频播放流程,如下:应用层创建AudioTrack,并配置播放音频的模式mode、采样率、format以及usag

2022-04-27 21:07:07 7980 18

原创 混音理论篇

混音基础理论篇什么是声音声音是由物体震动,从而对周围空气产生的一种挤压压力,形成的声音效果。可以在脑海中想象一下水波纹的效果图。并且声音在传输时需要介质,无介质如真空是无法传递声音的,由于声音从音源出来会经过各种反射如墙面,各种反射声音经过叠加混音后传入人耳,才是我们听到的声音,所以大部分情况下我们听到的都是混音,除混音外也有可能同一音源经过墙面反射后先后到达我们的耳朵,但当两次声音间隔小于0.1s时人耳是无法感知的。声音的基本属性从上图声波示图中,知道波有频率、振幅和波形等特性,频率代表音阶

2022-03-05 22:06:22 3242 2

原创 Android Audio播放音频之数据传递

AudioTrack之数据传递简介接上一篇AudioTrack播放音频之建立通道找到了通道的唯一句柄值output,这个output实质就是在AudioFlinger创建PlaybackThread后,以key-value形式上保存(output, PlaybackThread)的key值,通过output就可以找到播放音频将从哪个PlaybackThread线程传递数据,这个线程相当于一个中间角色,应用层进程将音频数据以匿名共享内存方式传递给PlaybackThread,而PlaybackThrea

2022-02-10 20:05:26 7908 4

原创 Audio播放音频 --- 建立播放通道

Audio播放音频 — 建立播放通道简介虽然文章标题是《建立播放通道》,其实播放通道早在AudioPolicyManager解析configuration配置文件时,openoutput业务逻辑就已经把输出通道打开并建立好了,而播放音频流程就是根据音频属性Attribute来决定使用哪个输出通道output而已,但是这个流程业务相对openoutput更加复杂,也涉及更多的音频专业知识;并且播放音频不只是选择输出通道,还涉及往这个输出通道灌音频数据,传送到设备去播放;本篇文章只涉及输出通道的选择,音频

2022-01-12 20:06:36 7271 5

原创 Audio解析strategy配置文件

Audio解析strategy配置文件简介audio_policy_configuration配置文件配置了音频Audio的设备、数据流信息,而strategy相关配置文件则配置某种streamType的音频使用哪种音量曲线,如voice_call和music他们的音量曲线是不一样,后者这种关系叫做strategy策略.默认解析路径在/vendor/etc/audio_policy_engine_configuration.xml下,如果找不到可以去:char* POLICY_USAGE_LIBRA

2021-12-30 20:42:59 3414

原创 音频Open Output业务逻辑

open output顾名思义,你可以理解为打开一条输出通道,这条通道上跑着一定格式、采样率等特定的数据,通道的终点是一个音频设备,用于播放;所以这个open output业务就是初始化这条通道,为这个通道建立各种所需功能等。

2021-12-24 20:38:07 3448

原创 AudioFlinger、AudioPolicyService和AudioPolicyManager之间的关系?

AudioFlinger和AudioPolicyService属于binder服务,而AudioPolicyManager是AudioPolicyService服务进程下的一个独立功能模块,该模块可以由厂家自行实现(但必须遵循aosp的接口定义),最后提供so库,由AudioPolicyService服务load进来调用即可。

2021-12-22 20:40:49 5307 2

原创 audio_policy_configuration.xml文件解析

audio_policy_configuration.xml文件解析简介audio音频数据从一个源走到一个目的都是需要根据配置文件来决定,所以理解configuration配置文件中各个标签项转化为c++实体类的及各成员至关重要,本文先直接给出各标签和对应实体类的结果,后再简单分析其解析过程audio_policy_configuration.xml文件对应C++实体类configuration文件(audio_policy_configuration的缩写)为音频audio的设备、流以及路由等配

2021-12-16 20:26:18 8117

原创 枚举对比转换思路

枚举对比转换思路需求分析在Android系统开发中,我们经常会有这样的需求:a. 首先,我们会在代码中定义许多配置类型,如定义音频输出设备,耳机、扬声器、蓝牙音箱等等,你会想到用枚举,如下:enum audio_device_t { AUDIO_DEVICE_OUT_EARPIECE, AUDIO_DEVICE_OUT_SPEAKER, ....};b. 其次,我们在使用时会配置我们的输出设备,你可以在代码或者xml配置文件中配置,通常我们使用时,不一定和定义enum类

2021-12-16 20:23:29 1850

原创 JetPack Compose理解

每次点击该按钮时,调用方都会更新 clicks 的值。Compose 会再次调用 lambda 与 Text 函数以显示新值;此过程称为“重组”。不依赖于该值的其他函数不会进行重组。重组过程组合只能通过初始组合生成且只能通过重组进行更新。重组是修改组合的唯一方式。重组通常由对 State 对象的更改触发。Compose 会跟踪这些操作,并运行组合中读取该特定 State 的所有可组合项以及这些操作调用的无法跳过的所有可组合项。在重组期间,可组合项调用的可组合项与上个组合期间调用的可组合项不同,Com

2021-09-17 09:04:58 993

原创 Android开发工具视频Android 12(S)准备

Android开发工具视频Android 12(S)准备适配步骤下载最新的Android studio工具,点我到官网下载最新的吧!最新版的studio规定jdk使用必须至少11,所以请移步下载jdk吧,我用的是jdk16,点我跳转下载jdkwrapper文件夹下面的gradle.properties里面的gradle地址建议用7以上,如下:https\://services.gradle.org/distributions/gradle7.0.0-bin.zip同时,也建议根

2021-08-28 11:35:26 2699 1

原创 Android studio打包so动态链接库没有符号表问题

什么时符号表?动态链接库so文件结构是由一个个Section段构成,一般来说在文件最后会附件一个符号表段,描述其他段对应的函数、变量等符号,当so执行错误时,就会打印so有函数、变量等具体的堆栈符号信息,而不是一堆二进制数据;当然,这附加的符号表并不是执行必须的,可以去除掉,而且一般也是去除掉!否则so库size会特别大为什么Android studio生成的so不带符号表起初查询了网上的资料都是在cmakelist里面去:set(CMAKE_BUILD_TYPE DEBUG)set(CMAKE

2021-08-16 19:12:49 4536

原创 多媒体文章阅读记录

多媒体文章阅读记录mpeg2-ts 从TS到PAT和PMTwifi p2pRTSP协议学习笔记

2021-03-31 10:48:43 208

原创 Android权限浅析

Android权限浅析权限,是对想要操作文件或者设备的使用者的约束;使用者拥有某个文件的操作权限方可对齐操作,反之则无法操作文件!浅谈Linux的权限如上图,是Linux系统中的一个JCamera文件夹,d表示一个文件夹,r可读,w可写,x表示可以执行;这三位是固定顺序,假如其中某一项为‘-’,则表示不拥有此项权限;drwxr-xr-x : 表示jackzhous文件拥有者UID,具有可读可写可执行的权限,用户组staff有可读和可执行权限,其他用户有可读和可执行权限;在Linux系统底层对读写

2020-12-23 12:28:36 271

原创 android内存管理机制与优化

android内存管理机制与优化心得简介android使用Dvalik/ART虚拟机来对应用管理,其使用专门的垃圾回收机制来管理堆上的内存,程序员无需自己去释放分配的内存;虽然减轻了我们许多的工作量,但是当我们开发的时候分配内存不合理,也很容易造成内存管理不当,如内存抖动、内存泄漏和内存碎片,所以我们也要弄明白虚拟机是如何管理内存,然后我们在去针对性的优化内存管理机制android内存采用...

2020-12-11 12:30:19 453

原创 Android OTA使用及原理浅析

Android OTA使用及原理浅析OTA(over the air)通过无线网络下载、删除更新等操作,完成业务操作;在Android系统方面,使用OTA可以解决系统升级,而其差分包会增量更新系统,具有占比流量小,适用于Android端;制作OTA升级包OTA包分区全量包和差分包;全量包包含编译整个系统后的所有内容,差分包则是在两个全量包基础上,对比产生的差分包;假如你有两个全量包Full A和Full B,此时设备上的系统是A版本,你之多的差分包C = Full B - Full A,则可以使用O

2020-12-11 11:59:09 2588

原创 Android 8.1高通msm8950平台Camera HAL层架构

Android 8.1 Camera架构及API解释基础使用先看看基础适用,然后以此为例逐步展开获取camera service服务CameraManager service = (CameraManager) context.getSystemService(Context.CAMERA_SERVICE);打开相机,并传入回调service.openCamera(cameraId, stateCallback, handler);private CaptureRequest.Builder

2020-12-04 17:51:22 1534 1

原创 解析高通vendor层mct框架

解析qcom mct module凡越底层的代码,更能体现代码的精髓所在 — 数据结构 + 算法模型,所以在研究其代码时,可以先重点关注其数据结构,能更好的帮助我们解析其背后的原理逻辑!今天来分析一下高通的camera vendor下与camera hal相关的部分,mct模块,mct算是其中一个基础模块,其他所有的sensor、isp、imagelib等都会使用mct,所以对它的理解至关重要,更能帮助我们理解其他模块基础数据结构体mct_module_tmct_module_t是mct的重要模块

2020-12-04 16:16:57 4875 1

原创 Android硬编码知识点总结

Android硬编码知识点总结编码软编码ffmpeg可以解决众多Android机型适配的问题,但由于软编码会大量消耗CPU资源,反而得不偿失!所以一般会考虑使用Android自身硬编码,不足时用软编码补充!硬编码中的一些特性有时会难以理解,这里记录一下我在编码时的心得总结!帧率如何设置?一般根据使用场景实际需求来设定,帧率表示每秒输出多少帧画面!一般来说在30帧左右的情况下,人眼是看不出画面有拖影的现象,所以没有特殊要求可以设置30帧;但是帧率也和我们画面的宽高尺寸有关,如果宽高尺寸太大有可能导

2020-11-25 11:55:20 1696

原创 Android进阶 --- ActivityManagerService模块分析

Android进阶 — ActivityManagerService模块分析简介作为一名合格的Android开发工程师,我们不仅要会使用四大组件,并且要知晓其背后运作的原理!当我们学会了其背后的运作原理,才能更好的帮助我们进行开发工作,知晓每个组件是如何与系统进行交互、数据传递以及调用逻辑,当遇bug难题,才能更好的对症下药及时解决。本博文是由android8.1.0源码分析后的结果AMS模块重点结构类解释四大组件如Activity的打开、关闭等操作都是由App进程通过Binder跨进程调用

2020-10-14 17:53:48 2431 2

原创 Activity屏幕旋转重建ViewModel不销毁问题分析

Activity屏幕旋转重建ViewModel不销毁问题分析ViewModel是数据与页面解耦的一大利器,使用ViewModel无须关系其与Activity的生命周期引起的问题,在Activity生命周期的尽头会自动移除掉ViewModel,切断与Activity的联系,及时后续有ViewModel的事件传递过来,也无法达到Activity,不会引起任何bug疑惑???但是在某种情况下,却出现这样一个情况!Activity配置横竖屏自动切换,当Activity屏幕切换时,其生命周期已经走到尽头,on

2020-10-12 18:27:29 1995 5

原创 android 源码部分API

android 源码部分API本文记录博主在阅读android源码过程中底层部分API!sp<Surface> android_view_Surface_getSurface(JNIEnv* env, jobject surfaceObj)参数:surfaceObj – java对象Surface返回:java对象Surface有一个long类型的mNativeObject成员,它表示java对象Surface持有Native层Surface的指针,该函数就是返回这个指针ANat

2020-09-04 13:02:32 353

原创 A律十三折线法G711编解码介绍

G711编码算法理解简介G711国际电信联盟ITU-T定制出来的一套语音压缩标准,主要用于对PCM音频数据编码,将PCM16bit数据压缩为为8Bit,它是主流的波形音频编码器,相当于只在帧内压缩,不会从帧间之间来考虑压缩;其主要用于PCM采样率为8K的场景进行编码...

2020-08-26 10:54:03 23552 7

原创 PMS

PackageMangerService源码阅读总结简介PackageMangerService(简称PMS)是Android系统中负责管理所有Apk的安装、卸载更新等工作,其运行在SystemServer进程,维护管理系统中所有的Apk包管理,那它是如何管理众多APK的呢?它怎么知道系统中有哪些APK应用,这些Apk在什么时候安装、卸载和更新,PMS如何感知?就算它知道了系统中所有APK的存在,如何去建立一个维护呢?带着以上诸多疑问,从源码的角度,来探寻这些问题,感悟PMS的精髓所在!浅析自己

2020-08-13 16:30:14 1047

原创 Android LocalSocket、LocalServerSocket原理分析

Android LocalSocket、LocalServerSocket原理分析查看Android源码会发现很多地方如Zygote就用到了LocalServerSocket来监听请求,它可以用用于本地进程、线程通信,也可以用于网络通信,LocalSocket底层实质用到了C++的Socket套接字,对其做了一定的封装;在此,理解其背后的运作原理,可以帮助我们在分析源码时,快速了解一些源码机制问题LocalSocket基本使用server服务端//创建socket并绑定监听 新创建的Local

2020-07-20 15:45:07 3574

原创 怪啊!Stream方式读取字符文件出现许多乱码?

Stream读取字符文件之乱码问题简介如题,开发中我们经常使用InputStream方式来读取一些文件,如字符文件,也许你会这样做:public static BankArea getStringFromFile(Context context){ InputStream stream = null; try { 打开字符文件data.json stream = context.getAssets().open("data.json"); St

2020-07-10 17:04:45 1495

audio_policy_configuration.xml

android 音频设备配置文件

2021-12-22

AMS注释源码(ActivityManagerService)

ams注释源码,startActivity相关逻辑已添加注释!快速帮助你理解AMS的处理逻辑,该资源配合我的博客Android进阶 — ActivityManagerService模块分析(https://blog.csdn.net/jackzhouyu/article/details/109021412)

2020-10-15

mv-file移动文件脚本

shell脚本,移动命令,只移动目录下的文件,不移动文件夹;例如 mv_file ./dir1 ./dir2 将dir1下面的文件拷贝后dir2下

2020-08-27

清楚android项目工程drawable/mipmap/layout/menu路径下无用的资源文件

shell脚本编写的功能,在Linux和mac终端上运行;主要用于Android studio下的Android项目,自动清除项目drawable、mimap、layout和menu下无用的资源文件

2018-10-26

动态加载demo

不好意思,没分了需要一点分

2017-01-13

EventBus秒表demo

一个简单的EventBus使用demo

2016-12-21

推流器ffmpeg资源

ffmpeg资源推流器,使用方式: 客户端:输入:视频名称,视频必须放在目录下面, 输出:里面有 在电脑端,可以用ffplay 进行播放

2016-03-07

ffmpeg 解码视频文件工程demo

请看工程内部的ReadMe文件,主要是对视频文件进行解码,解码成多个流文件,解码其中视频流位yuv流

2016-01-28

ffmpeg移植到android的基础工程

工程5个按钮: ffmpeg几个包里面的基础方法,libavcodec avformat avfilter configuration 等

2016-01-27

android屏幕录像

在android手机上实现简单的屏幕录制

2015-11-16

slf4j最新jar包下载 1.7.12

slf4j最新jar包下载 1.7.12版本,hibernate必须的工程包

2015-09-01

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

TA关注的人

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