美文网首页
Android音频系统(二) AudioServer进程

Android音频系统(二) AudioServer进程

作者: Amber_9 | 来源:发表于2023-10-16 19:48 被阅读0次

    AudioServer进程是在init进程启动之后通过启动脚本启动的。
    涉及文件:

    frameworks/av/media/audioserver/main_audioserver.cpp
    frameworks/av/services/audioflinger/AudioFlinger.cpp
    frameworks/av/services/audiopolicy/service/AudioPolicyService.cpp
    frameworks/av/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
    frameworks/av/services/audioflinger/AudioHwDevice.cpp
    frameworks/av/media/libaudiohal/impl/DeviceHalLocal.cpp
    frameworks/av/services/audioflinger/AudioStreamOut.cpp
    

    一. AudioServer启动分析:

    1.AudioFlinger服务初始化,并注册进ServiceManager:

    sm->addService("media.audio_flinger), new sp<AudioFlinger>);
    

    AudioFlinger负责音量设置、混音播放、录音等功能,它是音频策略的执行者。

    2.AudioPolicyService服务初始化,并注册进SM:

    sm->addService("media.audio_policy", new sp<AudioFlinger>);
    

    AudioPolicyService是音频策略的制定者,在AudioPolicyService初始化的过程中,除了向SM注册服务之外,还做了以下事情:

    • 1) 通过AF加载解析etc下的config音频策略文件,读取硬件相关配置;
    • 2) 根据config module信息,loadHwModule 加载打开HAL动态库,获取AudioHwDevice结构体作为访问HAL的媒介;
    • 3)创建AudioPolicyManager对象,通过AF调用AudioHwDevice openOutputStream ,最终获取构建对应的AudioStreamOut对象。
    • 4)构建AudioStreamOut对应的PlaybackThread音频播放线程用于音频输出。
    • 5)通过AudioHwDevice openInputStream 获取构建对应的AudioStreamIn对象用于音频录入。
      详细的调用过程参照以下AudioServer的启动时序图:

    3. 启动Binder线程池,等待客户端的访问。

    二、AudioServer的启动时序图

    详细调用过程如下:

    01_AudioServerStart_primary.png 02_AudioServerStart_loadHw.png 03_AudioServerStart_openAudioInput.png

    相关文章

      网友评论

          本文标题:Android音频系统(二) AudioServer进程

          本文链接:https://www.haomeiwen.com/subject/knxfidtx.html