安卓
文章平均质量分 81
盼雨落,等风起
等风来
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
安卓 audioservice 之 BtHelper
主要功能:处理蓝牙SCO音频连接状态变化事件,维护内部状态机,并在适当时机发送系统广播通知其他组件。状态转换处理:根据蓝牙耳机的音频状态变化更新内部状态机重连机制:在特定条件下自动重新建立SCO连接广播通知:在状态变化时通知系统其他组件兼容性处理:同时发送新旧两种意图以保证向后兼容状态处理场景:• 连接成功:更新状态,可能需要设置SCO开启和发送广播• 连接断开:处理重连逻辑,更新状态,发送断开广播• 连接中:更新外部激活状态。原创 2026-01-01 17:30:04 · 998 阅读 · 0 评论 -
android AV 之 SimpleC2Component
以 aac 解码 process 为例。Android 调用到。原创 2025-12-25 08:14:30 · 262 阅读 · 0 评论 -
android audiopolicy 之 Engine
1.STRATEGY_后缀(音频策略类型)作用定义音频流的逻辑分组策略,用于决定不同音频场景(如音乐、通话、铃声)的默认设备路由和混音行为。(例如:音乐播放用扬声器,通话用听筒。常见策略类型策略名称用途说明媒体播放(音乐、视频、游戏)通话(语音通话、VoIP)系统提示音(铃声、通知音)避免打断媒体的提示音(如低优先级通知)无障碍功能(如屏幕朗读)拨号键盘音语音传输(如对讲机模式)代码中的使用场景通过为策略选择设备。在中映射属性()到策略。2.后缀(强制路由场景)作用。原创 2025-08-05 00:45:25 · 942 阅读 · 0 评论 -
安卓 之 PassthruPatchRecord
PassthruPatchRecord 是 Android AudioFlinger 中一个特殊的 patch。它的核心设计目标是实现一种 “直通” 模式,用于 AUDIO_SOURCE_VOICE_PERFORMANCE 等需要极低延迟的音频场景。• 继承关系: PassthruPatchRecord -> PatchRecord -> RecordTrack -> TrackBase。原创 2025-12-19 07:33:51 · 947 阅读 · 0 评论 -
android 媒体之 MediaSession
• 角色: 核心枢纽和状态机。它是整个媒体播放控制的核心。• 位置: 通常由后台服务(MediaBrowserService)创建并持有。• 关键点: 它不直接处理媒体播放,而是定义接口和保存状态,具体的播放动作由 MediaSession.Callback 的实现者(你的播放逻辑)完成。原创 2025-12-18 22:40:33 · 341 阅读 · 0 评论 -
android 之 AAudio
AAudio 是 Android 官方推出的低延迟音频库(API 26/Android 8.0+),专为设计,核心目标是满足游戏、实时音频应用(如乐器、语音通话)等对延迟敏感的场景需求。原创 2025-12-13 17:55:09 · 993 阅读 · 0 评论 -
android 之Handler消息处理
职责: 是消息循环的核心,扮演着“泵”的角色。Handler(发送者/处理者) 将 Message(消息) 投递到 MessageQueue(消息队列) 中,Looper(循环器) 不断从队列中取出消息,并回调给 Handler(处理者) 进行处理。关键点: 内部维护了一个消息池,使用 obtain() 方法可以复用消息对象,避免频繁创建对象引发GC,优化性能。2.它是一个阻塞队列:当队列为空时,调用 next() 方法取消息的线程会进入休眠状态,直到有新消息到来。一个线程有且仅有一个 Looper。原创 2025-12-06 13:06:30 · 412 阅读 · 0 评论 -
audioflinger 之 PatchPanel
createAudioPatch_l是 PatchPanel 的核心函数,负责创建音频链路(audio patch),支持设备到设备、设备到混音、混音到设备等多种连接方式。函数根据不同的连接场景选择硬件直连或软件桥接方案。软件桥接路径:当需要跨硬件模块或硬件不支持patch时,创建虚拟的播放和录制线程硬件直连路径:同一硬件模块内的设备间直接连接混音器到设备:播放线程输出到物理设备设备到混音器:物理设备输入到录制线程。原创 2025-11-19 07:50:38 · 349 阅读 · 0 评论 -
Android 之 systrace
• 作用:检查指定的 trace tag 是否启用• 用途:在需要复杂计算的 trace 前先检查,避免不必要的性能开销。原创 2025-11-14 07:11:10 · 358 阅读 · 0 评论 -
安卓之 MediaSessionService
媒体控制的“管理员”和“快递员”MediaSessionService 是一个运行在 系统进程 中的核心服务,它的角色可以概括为:• MediaSessionStack:服务内部维护了一个优先级栈 来管理所有会话,而不是简单的队列。• 优先级决定因素:• 价值:这种机制确保了当用户按下媒体键时,系统总能准确地控制当前最前台、最相关的媒体应用,避免了多个应用(如音乐和播客App同时运行)之间的控制冲突。原创 2025-11-03 21:33:59 · 339 阅读 · 0 评论 -
audioflinger 的创建的track buffer
FrameCount(音频缓冲区中的帧数)的计算主要取决于上下文(如播放或录制)、缓冲区类型(共享缓冲区或流式缓冲区)、硬件限制以及延迟要求。在PlaybackThread::createTrack_l()函数中,根据轨道的类型(共享缓冲区或流式轨道)计算实际的frameCount。如果没有共享缓冲区,frameCount需要根据延迟要求计算最小帧数(minFrameCount),以确保足够的缓冲区深度来避免欠载(underrun)。• 缓冲区类型:共享缓冲区直接决定frameCount;原创 2025-10-25 20:17:25 · 488 阅读 · 0 评论 -
audio 之 BtHelper
Android 音频系统中的一个核心组件,用于管理与蓝牙音频设备相关的所有通信和状态。原创 2025-10-05 12:40:49 · 702 阅读 · 0 评论 -
NuPlayer 之 Renderer
触发postDrainAudioQueue_l()或postDrainVideoQueue()开始渲染。解码器输出数据 → NuPlayer::Decoder::onMessageReceived。音频数据存入mAudioQueue,视频数据存入mVideoQueue。• 每次写入后通过mNotifyConsumed通知解码器。• 通过AudioSink::write()写入音频设备。• 根据VSync信号和音频时钟调整渲染时机。• 通过Surface直接提交给显示系统。原创 2025-09-05 07:40:35 · 214 阅读 · 0 评论 -
nuplayer 之 GenericSource
负责从媒体源(MediaSource)读取数据(视频、音频、字幕等),并将其封装成 ABuffer 存入对应的 PacketSource 队列中,供播放器后续使用。• 检查 doSeek 中 readBuffer 的 mode 参数是否为 SEEK_PREVIOUS_SYNC(优先关键帧)。• 处理格式变化(INFO_FORMAT_CHANGED)或错误(如 ERROR_END_OF_STREAM)。当某个轨道(如音频或视频)的数据队列不足时,通过 ALooper 异步请求填充数据。原创 2025-09-04 08:27:03 · 908 阅读 · 0 评论 -
Android audio之 AudioDeviceInventory
是 Android 音频系统中的一个核心类,位于。→ 用户从 A2DP 切换到 LE Audio →。,包括设备的添加、移除、状态更新以及策略应用。添加设备 → 触发 HDMI 音频输出。→ 底层音频策略生效,触发路由切换。更新设备优先级 → 音频路由切换。→ 发送广播通知应用焦点变化。检测到断开 → 发送。→ 音乐播放器暂停。原创 2025-08-05 23:52:59 · 595 阅读 · 0 评论 -
安卓audio 架构解析
• 动态分配:当物理设备(如耳机、蓝牙设备)连接或虚拟设备(如远程submix)初始化时,AudioPolicyManager通过setDeviceConnectionState()动态分配唯一的audio_port_handle_t,并注册到系统可用设备列表(如mAvailableOutputDevices或mAvailableInputDevices)中。• 动态更新:设备状态变化(如拔出耳机)会触发路由更新,系统销毁原有绑定并重新分配audio_port_handle_t到新设备(如切换到扬声器)。原创 2025-08-03 15:32:01 · 581 阅读 · 0 评论 -
音频焦点 Android Audio Focus 进阶
focusLossForGainRequest 方法,用于根据请求的焦点增益类型和当前焦点状态,确定应该发送给当前焦点所有者的焦点丢失类型使用focusLossForGainRequest来确定丢失类型,然后调用handleFocusLoss实际处理焦点丢失,并返回丢失是否为永久性的。原创 2025-07-28 08:05:56 · 661 阅读 · 0 评论 -
安卓 Audio Thread 分析
作用: 用于实时跟踪待写入的剩余字节数。初始化时等于mCurrentWriteLength,表示本轮需写入的总量;直通模式:当需要立即写入时,mCurrentWriteLength设为mSinkBufferSize(硬件接收缓冲区大小)混音模式:threadLoop_mix()计算混音数据后,设置mCurrentWriteLength为需写入的字节数。作用: 记录从线程启动以来已写入音频设备的帧数(不包括挂起状态下的写入)作用: 记录线程在挂起(suspended)状态下模拟写入的帧数。原创 2025-07-24 08:27:55 · 346 阅读 · 0 评论 -
Android 之 audiotrack
由采样位宽和声道数决定)[citation:4][citation:6]。,在流式传输(非静态缓冲区)模式下尤为重要。的播放线程因缓冲区无数据而阻塞,写指针更新会触发其。作用较弱,因为数据一次性加载,无需流式更新。(用于处理环形缓冲区的位置回绕)。中管理共享内存缓冲区的核心方法,主要用于。中的一个关键状态变量,类型为。AudioFlinger消费数据。:在静态缓冲区模式(原创 2025-07-18 08:38:25 · 810 阅读 · 0 评论 -
audiorecord 之 抢占优先级
在 Android 系统中,不同音频源的抢占优先级由系统策略动态决定,主要基于(特权/普通)和(前台/后台)等因素综合判定。原创 2025-07-17 00:05:57 · 879 阅读 · 0 评论 -
仿Android智能指针示例
这个实现类似于 C++11 中的 std::unique_ptr,但更加简化.通过工厂方法 make() 创建对象并返回智能指针。禁用拷贝构造和赋值(避免多个智能指针管理同一对象)一个简单的测试类,包含构造/析构函数和一些成员函数。测试移动语义(将 obj2 移动给 obj3)这是一个模板类,可以管理任何类型 T 的指针。支持移动语义(通过移动构造和移动赋值)用于演示智能指针如何管理对象生命周期。提供指针操作符重载(-> 和 *)自动管理内存(析构时自动释放)创建智能指针管理的对象。原创 2025-07-16 07:33:35 · 389 阅读 · 0 评论 -
AudioPolicyManager
如果有待查询配置(mPendingReopenToQueryProfiles),关闭并重新打开输出。移除客户端(outputDesc->removeClient())处理LE广播路由(checkLeBroadcastRoutes)成功时,将输出添加到全局输出列表 (addOutput函数)调用outputDesc->start()增加活动计数。更新设备路由(setOutputDevices)当无客户端时:关闭输出(closeOutput)调用desc->open()打开底层HAL输出。原创 2025-07-14 22:27:15 · 589 阅读 · 0 评论 -
android studio 调试
dexdump 是用于分析和导出 Android 应用中 .dex 文件的工具,主要用于查看文件头信息和反编译代码。-t:指定临时文件名(默认 /sdcard/dex-temp-*)-l:输出布局(普通或 XML 格式)将APK后缀改为ZIP,然后解压。-c:验证校验码并退出。-m:仅导出寄存器映射。-f:显示文件头信息。-h:显示文件头详情。-d:反编译代码段。-i:忽略校验失败。原创 2025-07-07 00:13:00 · 354 阅读 · 0 评论 -
安卓之service
前台服务:高优先级、用户可见、适合长期任务,但需显示通知。后台服务:低优先级、用户不可见、适合短暂任务,但易被系统终止。决定因素:启动方式(startForegroundService() vs startService())及系统资源管理策略。原创 2025-07-06 17:26:51 · 608 阅读 · 0 评论 -
安卓audio之Remote_Submix
是Android系统提供的内录(Internal Audio Capture)方案,用于捕获设备音频输出(如扬声器播放的声音)而非麦克风输入。原创 2025-07-04 07:22:08 · 752 阅读 · 0 评论 -
Android 之 AIDL
接口层├─ IXXX: 定义业务逻辑接口(如图中 IMediaPlayer)│├─ BpXXX: 客户端代理 (Proxy)│ ├─ 继承关系: public IXXX, public BpRefBase│ └─ 核心成员: mRemote (BpBinder*)│└─ BnXXX: 服务端实现 (Native)├─ 继承关系: public IXXX, public BBinder└─ 业务载体: MediaPlayerService::Client通信基类。原创 2025-07-01 08:34:29 · 887 阅读 · 0 评论 -
Android.mk
【代码】Android.mk。原创 2025-06-27 08:26:42 · 699 阅读 · 0 评论 -
Android.bp 文件
按平台差异化配置。原创 2025-06-27 08:13:50 · 597 阅读 · 0 评论 -
Android Framework 调用栈
在Android Framework开发中,添加调用栈(Call Stack)是调试复杂问题(如崩溃、死锁或流程追踪)的核心手段。适用于Activity、Service等组件或Framework中的Java代码。使用Log日志会输出从当前点回溯的完整调用链,包含类名、方法名及行号。onCreate()适用于HAL、JNI或系统服务等底层模块。(需链接libutils:Android 8.0+需用替代旧版libcutils。.sondk-stack适用于驱动或内核模块调试。VM。原创 2025-06-18 22:37:41 · 738 阅读 · 0 评论 -
android CALL 之 RIL、TELEDCOM、PHONE
RIL 是 Android 电话系统的。原创 2025-06-15 22:38:29 · 1131 阅读 · 0 评论 -
android 之 CALL
点击拨号onUserAction(拨号)更新Call状态刷新界面(计时/状态)DIALINGRINGINGACTIVERinger这一架构通过)与DIALINGDIALINGHOLDINGMUTEHOLD。原创 2025-06-12 22:47:42 · 1070 阅读 · 0 评论 -
Android Framework 之 AudioDeviceBroker:管理音频设备路由
【代码】Android Framework 之 AudioDeviceBroker。原创 2025-06-09 22:22:32 · 884 阅读 · 0 评论 -
音频焦点 Android Audio Focus
当多个应用需要播放音频时,音频焦点确保用户听到的内容不会混乱(如多个音乐应用同时播放)。通话属于高优先级音频场景,系统会强制其他应用让出音频焦点。当通话结束时,电话应用释放焦点,音乐播放器可能重新获得焦点(需主动重新请求),恢复播放。电话应用的音频焦点请求由系统自动处理,开发者无需手动实现。除通话外,导航提示、警报声等也会通过音频焦点机制中断音乐,处理逻辑一致。当其他应用请求焦点时,当前应用需根据情况暂停播放、停止播放或降低音量。类型的焦点(短暂独占),以确保通话音频的独占性。请求焦点,并监听焦点变化。原创 2025-03-21 07:15:45 · 3460 阅读 · 0 评论 -
android 之 NuPlayer 介绍
是 Android NuPlayer 播放框架的核心渲染模块,负责协调音视频数据的。,确保播放流畅性与时序准确性。原创 2025-06-07 00:37:41 · 556 阅读 · 0 评论 -
android 之 MediaExtractor
是Android多媒体处理的基础组件,是其核心价值。是Android多媒体框架中的,主要作用是从媒体文件(如MP4、MKV、MP3)中分离音视频轨道数据,为后续解码(MediaCodec)或处理提供原始压缩数据流。Uri。原创 2025-06-06 08:03:58 · 885 阅读 · 0 评论 -
android 之 Tombstone
Android 系统中的是记录的关键日志文件,当应用或系统服务因严重错误(如内存访问异常、空指针解引用等)崩溃时自动生成。原创 2025-06-05 21:58:19 · 931 阅读 · 0 评论 -
android 之 MediaPlayer 与 NuPlayer
是 Android 多媒体框架的核心组件,用于(本地、网络或资源文件),支持主流格式如 MP3、AAC、MP4 等。:对特殊格式兼容性依赖设备硬件,大型文件处理易内存泄漏,复杂场景可能要用ExoPlayer。原创 2022-02-22 23:35:56 · 364 阅读 · 0 评论 -
android 之 KeyguardService
是 Android 锁屏功能的核心服务,负责管理设备锁屏界面(如密码、图案、指纹等验证流程),并协调系统安全策略与用户交互。启动服务(通过 startSystemUi())通过 KeyguardManager。原创 2025-06-04 07:35:55 · 952 阅读 · 0 评论 -
android 媒体框架之MediaCodec
MediaCodec 是 Android 底层多媒体框架的核心组件,负责高效处理音视频编解码任务。:避免频繁申请内存,提升性能(尤其高清视频)。硬件加速:优先选择设备专属编解码器(如。MediaCodec 通过。是同步与错误恢复的关键。原创 2025-05-31 11:02:26 · 2524 阅读 · 3 评论 -
DTMF详解
DTMF(双音多频)是一种通过两个不同频率的正弦波叠加表示数字或符号的通信技术,主要用于电话拨号、远程控制等场景。在Android中,DTMF音调通过高低频组合实现,例如数字“1”对应697Hz(低频)和1209Hz(高频)。原创 2025-05-30 07:35:36 · 670 阅读 · 0 评论
分享