自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

分享Android应用和系统开发、音视频编码、性能优化相关知识

收藏+关注+点赞,是原创分享的动力。

  • 博客(100)
  • 收藏
  • 关注

原创 安卓相机慢动作的软件实现要点

慢动作英文称呼SlowMotion,也就是高帧率录像,如果以正常30帧播放,就能看到慢动作效果,可以用来拍摄快速移动物体的瞬间,比如鱼儿的游动、终点冲刺结果等。本文主要介绍慢动作在安卓相机应用中如何实现

2024-02-25 16:21:41 1383

翻译 [译]Android性能优化-Kotlin优化isBlank

最近在优化 Jetpack Compose 运行时的部分时,偶然发现了一个看似无害的 API isBlank() 。如果调用的字符串为空或仅由空格字符组成,则此 API 将返回 true 。但它真的无害吗?让我们看一下 JVM 实现,以更好地了解它的作用

2024-02-23 10:55:53 34

原创 安卓OpenGL添加水印并录制(二)---抖音录制原理

通过 前文 我们知道了如何采集 Camera 视频,叠加水印、贴纸保存为MP4,但是录制视频并没有音频,本文进一步介绍添加音频录制实现。

2024-02-20 22:15:54 917

原创 如何把手机平板变为电脑的屏幕

闲置的手机平板、触屏音箱等,均可作为电脑的扩展屏,为电脑增加一块显示屏,本文介绍如何使用免费的软件spacedesk实现。

2024-02-11 21:37:08 5691 1

原创 安卓SurfaceTexture中updateTexImage使用及源码分析

在Android系统中,SurfaceTexture 是一个特殊的类,它将来自硬件纹理缓冲区(如相机预览流或视频解码输出)的图像数据转换为 OpenGL ES 可以直接使用的纹理。updateTexImage() 方法是 SurfaceTexture 类的核心方法之一,此方法的主要作用是从 SurfaceTexture 内部持有的图像缓冲区中取出最新一帧,并将其内容复制到与 SurfaceTexture 关联的 OpenGL 纹理上。这对于实时图形渲染、视频播放以及从相机捕获并实时处理图像等场景至关重要。

2024-02-02 22:49:08 1127 2

原创 安卓MediaRecorder(4)视频采集编码写入详细源码分析

通过 文2 我们知道了 MediaRecorder 各个接口 Framework 中的实现。通过 文3 我们 知道了 MediaRecorder 底层音频的采集、编码、写入文件等详细流程。本文主要介绍 MediaRecorder 视频的采集、编码等相关流程。

2024-01-24 22:07:39 1169

原创 安卓MediaRecorder(3)音频采集编码写入详细源码分析

前言音频采集音频初始化AudioRecord 分析AudioSource 采集到音频音频编码音频编码后数据处理MPEG4Writer写入音频编码后数据到文件MPEG4Writer::Track 取编码后的音频编数据结语

2024-01-13 11:19:43 1244 1

原创 Intellij建议用String替换StringBuilder

String 和 StringBuilder 性能对比String 和 StringBuilder 使用的字节码对比

2024-01-01 13:24:40 382

原创 安卓MediaRecorder(2)录制源码分析

JAVA new MediaRecorder() 源码分析android_media_MediaRecorder.cpp native_init()MediaRecorder.java postEventFromNativeandroid_media_MediaRecorder.cpp native_setup()MediaRecorder 参数设置MediaRecorder.prepare 分析MediaRecorder.start 分析MediaRecorder.stop 分析

2023-12-09 16:29:42 1087 2

原创 Android Bitmap 使用Vukan、RenderEffect、GLSL实现模糊

使用 Vukan 模糊使用 RenderEffect 模糊使用 GLSL 模糊RS、Vukan、RenderEffect、GLSL 效率对比

2023-11-27 22:43:03 1439

原创 安卓使用MediaRecorder(1)录制音频的详细使用

引言使用 MediaRecorder 的步骤常见问题及解决思路无法访问存储卡目录录制的音频文件没有声音录制过程中出现异常MediaRecorder无法正常启动录制的音质或者画质很差录制的文件无法播放结语

2023-11-26 19:11:39 1731

原创 Android性能优化--Perfetto用SQL性能分析

Perfetto SQL 基础Perfetto SQL 性能分析

2023-11-04 21:02:39 761

原创 Audacity 使用教程:轻松录制、编辑音频

本教程向大家介绍了如何使用 Audacity 进行音频录制和编辑。通过简单的操作,你可以轻松地录制和处理音频文件。无论你是音乐爱好者还是专业人士,Audacity 都能满足你的需求。快来尝试一下吧!

2023-10-01 12:07:31 2323

原创 Android 性能优化–Gradle 编译速度优化

编译速度优化1. 保持工具最新2. 使用 KSP 代替 kapt3. 避免编译不必要的资源4. 优化 repositories maven 排序5. 在调试构建中使用静态构建配置值6. 使用静态依赖版本7. 创建库模块8. 为自定义构建逻辑创建任务9. 将图像转换为 WebP10. 禁用 PNG 处理11. 挑选 JVM 垃圾收集器12. 增加 JVM 堆大小13. 使用非传递 R 类14. 使用非常量 R 类15. 禁用 Jetifier 标志16. 使用配置缓存

2023-08-16 07:00:00 381

原创 Android 11 获取启动其他应用

如果应用以 Android 11(API 级别 30)或更高版本为目标平台,并查询与设备上已安装的其他应用相关的信息,则系统在默认情况下会过滤此信息。此过滤行为意味着您的应用无法检测设备上安装的所有应用,这有助于最大限度地减少您的应用可以访问但在执行其用例时不需要的潜在敏感信息。比如 queryIntentActivities()、getPackageInfo() 和 getInstalledApplications() 将无法获取到返回结果.NameNotFoundException

2023-08-08 21:50:40 475

原创 Android Compose Button defaultButtonColors

编译会出现异常 Unresolved reference: defaultButtonColors 新版本已经没有 ButtonConstants.defaultButtonColors 和 backgroundColor 可以使用 ButtonDefaults.buttonColors 替换

2023-07-01 16:09:46 546

原创 Android Studio Bot 下载使用

下载 Android Studio Hedgehog 找到Studio Bot: View->Tool Windows->Studio Bot 登录 Google 账号

2023-07-01 15:56:53 759

原创 Android性能优化--Perfetto抓取trace

开启Android的trace跟踪服务;使用 adb 抓取;通过 perfetto 网页抓取;直接在手机上抓取;使用 record_android_trace 抓取;熟悉 perfetto 快捷键,会有事半功倍效果;

2023-04-17 13:00:15 1769 1

原创 安卓Camera2用ImageReader获取NV21源码分析

以前如何得到Camera预览流回调如何使用Camera2得到预览流的回调是否可以通过ImageReader直接得到NV21回调呢ImageReader数据流回调的流程源码分析

2023-02-12 16:22:57 1213

原创 Android性能优化--Perfetto分析native内存泄露

本文示例是windows,这里使用了python工具,在Linux和mac同样适用。这里只能抓到一次内存的快照,如果想连续记录多次内存的数据需要能Root手机。抓取一次某个应用的内存命令如下,注意提前关闭其它adb程序,如AS。可以看到第一个大块有内存一直上升,结合其中的栈堆,分析并解决即可。是解决问题后,抓取的tarce,可以看到问题已解决。这里我上传了一份自己抓的数据,下载地址。通过点击 方块,对比不用时刻的内存。下载 perfetto ,地址在。每执行一次,上一步会记录一次。连续抓取多次内存快照。

2022-12-21 20:38:16 2184

原创 Windows WSL Ubuntu Android 编译

安装ubuntu;替换换ubuntu20.04为阿里云源;下载 LineageOS 源码;repo安装使用项目配置;扩充wsl磁盘空间;迁移虚拟磁盘;Android编译依赖工具链;源码编译;

2022-08-21 18:00:37 1084

原创 WSL增加独立的虚拟磁盘VHDX

WSL安装;安装Hyper-V;挂载VHD磁盘,以管理员权限启动PowerShell;创建VHD磁盘;在WSL中(如Ubuntu)格式化VHD磁盘为ext4;

2022-08-21 17:56:09 1779

原创 Android ITelephony EndCall Remove 各版本挂断、拦截电话方法

在 Android 8.0 、Android 9.0 中存在 endCall() 接口从 Android 10 开始,已经没有 endCall() 接口在 Android 10 之前可以通过如下方式 挂断 电话Android 10 之后 挂断电话参考如下

2021-11-19 17:11:33 3844

原创 安卓基于SRS的Webrtc推拉流

Https必须需要域名httpx-static 配置 https 代理基于SRS 配置文件支持 httpsAndroid 推拉webrtc流到srs

2021-10-18 17:05:23 3902 3

原创 安卓mediasoup webrtc h264 编解码相关源码分析

mediasoup H264 支持安卓 webrtc 视频采集流程源码分析安卓选择软编码硬编码流程mediasoup openh264 软编码源码分析mediasoup 视频 H264 硬编码解码器初始化流程openh264 提供编解码相关函数

2021-09-10 13:47:40 1318

原创 安卓mediasoup输出H264流(支持H264编码)

默认视频编码是VP8源码分析修改支持H264编码

2021-09-10 13:26:22 905

原创 安卓 webrtc 开启h264 软编解码

修改 use_linux_config增加 codec_list parser_list h264 支持增加文件 LibH264Decoder.java 增肌文件 LibH264Encoder.java 增加 h264_codec.cc 修改H264 Create()修改 sdk/android/BUILD.gn 修改 SoftwareVideoDecoderFacoty.java 和 SoftwareVideoEncoderFacoty.java编译使用吧,祝好运。。。

2021-09-09 14:01:11 3211 1

原创 安卓 Mediasoup V3 基于webrtc 分支m84 的编译

相关网址链接mediasoup-client-android m79 编译mediasoup-client-android 更新到 m84libmediasoupclient 编译使用

2021-09-07 17:32:09 1388

原创 安卓webrtc在ubuntu 2004下编译使用

Http 全局代理配置编译boto 代理配置Unable to reach the snap store 问题解决ERROR: The installation of the Chrome OS default fonts failed.Android中使用的c++库是libstdc++Exception: Missing licenses for following third_party target编译静态库 libwebrtc.alibmediasoup 编译

2021-09-07 15:05:12 1549

原创 Android 断点调试 webrtc、medieasoup

调试代码工程准备编译 Debug 包添加编译参数安卓应用中修改 `app/build.gradle`设置DEBUG TYPE设置源码映射

2021-09-07 14:17:08 1061 1

原创 安卓增加 mediasoup webrtc 日志输出

安卓增加 mediasoup webrtc 日志输出增加 webrtc 日志增加 libmediasoupclient 日志增加 mediasoup-client 日志

2021-09-07 14:04:32 505

原创 安卓上传aar到 jitpack 仓库使用和示例

安卓上传aar到 jitpack 仓库使用和示例https://jitpack.io/ 仓库使用示例 https://github.com/chenjim/JitpackDemo本文首发地址 <>增加 ./jitpack.yml 使用jdk11./build.gradle 中增加 maven { url 'https://jitpack.io' }./settings.gradle 中增加 maven { url 'https://jitpack.io' }./j

2021-08-20 11:03:02 757

原创 Windows 终端 Terminal 配置

Windows Terminal 常用配置修改默认启动的命令添加 cmder 到 Windows Terminal添加git bash 到 Windows Terminal

2021-04-14 10:53:51 904

原创 Android 第三方框架使用及原理解析

各种原理,经典第三方库源码系列自定义LayoutManager,RecyclerView中如何自定义LayoutManagerVLayout实现原理,即如何自定义LayoutManagerGlide加载原理,缓存方案,LRU算法Retrofit的实现与原理OKHttp3的使用,网络请求中的InterceptEventBus实现原理ButterKnife实现原理RxJava实现原理Dagger依赖注入热修复实现原理,解决方案组件化原理和解决方案Android WebView独立进

2021-04-02 13:30:49 555

原创 基于LCM通讯的java版本使用

官方开源地址:https://github.com/lcm-proj/lcmlcm-gen编译安装LCM 使用发送消息源码:examples/java/example_t_demo/SendMessage.java订阅消息的源码:examples/java/example_t_demo/MySubscriber.java编译所有的java文件运行订阅者MySubscriber新建一个命令窗口,运行发布者 SendMessage

2021-02-22 15:58:32 671

转载 安卓 每日一题 2020年9-10月问题及答案

Android9月1日题: 请解释下 Android 程序运行时权限与文件系统权限的区别?参考答案:apk 程序是运行在虚拟机上的,对应的是 Android 独特的权限机制,只有体现到文件系统上时才使用 linux 的权限设置。(一)linux 文件系统上的权限-rwxr-x--x system system 4156 2010-04-30 16:13 test.apk代表的是相应的用户/用户组及其他人对此文件的访问权限,与此文件运行起来具有的权限完全不相关。比如上面的例子只能说明 syste

2020-11-18 15:48:06 2237 1

原创 Android 性能优化 --内存优化、电量优化

Android 性能优化 --内存优化

2020-11-13 10:58:54 284

原创 从源码解析Android系统模块架构

深入理解PackageManagerService深入理解ActivityManagerServiceWindow 、WindowManager和WindowManagerServiceApplication生命周期应用进程启动流程Android Activity生命周期Activity布局加载流程Android 中的Activity、Window、View之间的关系ActivityThread的主要工作及实现机制应用进程Context创建流程Android Context 是什么?

2020-11-09 12:01:54 481

原创 APP架构设计

注解处理器数据存储--MMKV使用及原理数据存储--room使用RxAndroid的使用方式自定义类加载器加载加密类文件Android动态化框架App BundlesMVC、MVP、MVVM混合开发及Android WebView应用Android屏幕适配全方位解析Android中的Apk的加固(加壳)原理解析和实现Android 中使用AOPAndroid Studio编译过程其它安卓APP架构设计对移动端架构的思考

2020-10-10 11:14:22 1867 1

转载 安卓 每日一题 2020年7-8月问题及答案

Android7月2日题: RxJava中的自定义操作符实现思路?参考答案: RxJava的整体结构使用观察者与装饰器模式的组合实现,如果我们需要设计一个自定操作符,主要有以下情况:如果自定义的操作符是作为第一个事件源头,可以通过继承Observable类进行下游对接。如果自定义的操作符是作为变换过程中间的部份,可以通过继承AbstractObservableWithUpstream来进行上游与下游的对接过程。如果自定义的操作符是作为最终观查者收到的结果的二次处理,可以通过继承Obser

2020-09-17 15:04:20 596

Android基于perfetto分析native内存泄露 Trace

Android基于perfetto分析native内存泄露 的trace文件及traceconv.exe 原文地址 https://blog.csdn.net/CSqingchen/article/details/128382445

2022-12-20

空空如也

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

TA关注的人

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