零基础入门多媒体音频(2)-音频焦点2

说实话,android的代码是越来越难以阅读。业务函数里面狗皮膏药似的补丁与日俱增。继上篇简要介绍音频焦点的文章,这篇文章的主要内容是分析audiofocus的实现。看了一下午的相关代码都没找到做audiofocus策略的核心逻辑。目前能看懂的大概包含下面两个逻辑。欢迎评论区沟通。

audiofocus实现的核心代码是在project_dir/frameworks/base/services/core/java/com/android/server/audio/MediaFocusControl.java

project_dir/frameworks/base/services/core/java/com/android/server/audio/FocusRequester.java

project_dir在这里指代android源码的根目录。

1.MediaFocusControl会维护所有audiofocus申请信息的堆栈mFocusStack。

2.android当系统进入铃声或者通话状态,会静音住媒体播放器,代码片段如下,mRingOrCallActive变量会在应用申请焦点时进行判断刷新。

复制代码
                    if (mRingOrCallActive) {
                        mFocusEnforcer.mutePlayersForCall(USAGES_TO_MUTE_IN_RING_OR_CALL);
                    } else {
                        mFocusEnforcer.unmutePlayersForCall();
                    }

3.audiofocus的监听器都是在AudioManager的队列里维护。代码如下:

复制代码
    public void registerAudioFocusRequest(@NonNull AudioFocusRequest afr) {
        final Handler h = afr.getOnAudioFocusChangeListenerHandler();
        final FocusRequestInfo fri = new FocusRequestInfo(afr, (h == null) ? null :
            new ServiceEventHandlerDelegate(h).getHandler());
        final String key = getIdForAudioFocusListener(afr.getOnAudioFocusChangeListener());
        mAudioFocusIdListenerMap.put(key, fri);
    }

4.audiomanager进行焦点变化通知的核心类IAudioFocusDispatcher会调用listener。IAudioFocusDispatcher

自身会被注册给audioservice。

复制代码
                status = service.requestAudioFocus(afr.getAudioAttributes(),
                        afr.getFocusGain(), mICallBack,
                        mAudioFocusDispatcher,
                        clientId,
                        getContext().getOpPackageName() /* package name */, afr.getFlags(),
                        ap != null ? ap.cb() : null,
                        sdk);
相关推荐
weixin_446260853 小时前
AVA-Encoder:面向智能体原生视频表征学习框架
学习·音视频
cdprinter3 小时前
信刻——留置谈话音视频数据集中自动刻录归档解决方案
自动化·音视频
美狐美颜sdk5 小时前
直播APP开发技术架构解析:从音视频流到第三方美颜SDK接入的完整方案
大数据·人工智能·音视频·美颜sdk·美颜api
阿童木写作7 小时前
跨境电商图片翻译工具推荐:跨马翻译批量处理视频字幕与抠图
python·音视频
奈斯先生Vector7 小时前
AI 视频不是会动的图片:用 Shot Contract、时间码与音画质检构建可交付流水线
人工智能·重构·架构·prompt·aigc·音视频
ai产品老杨7 小时前
AI视频分析并发优化参数配置说明
人工智能·音视频
怪奇云呼军7 小时前
G.711、Opus 和重采样会拖慢识别吗?闪电智能VoiceAgent 的音频入口怎么选
java·人工智能·python·算法·云计算·音视频
DogDaoDao8 小时前
MSU 2026 视频编解码大赛放榜深度解读
音视频·视频编解码·hevc·av1·h266·msu·avs
小孔龙8 小时前
GraphicBuffer 跨进程共享
android
行业研究员9 小时前
Android内置GPS与腾讯地图定位技术对比分析
android·android定位·腾讯地图定位