audio_policy.conf文件:AUDIO_DEVICE_IN_REMOTE_SUBMIX含义

本文深入解析了Android音频系统中REMOTE_SUBMIX的用途,特别是在通过WiFi向ChromeCast等设备传输HDMI数据时的角色。REMOTE_SUBMIX用于重定向音频流至远程设备,而非本地播放,但特定系统音频如铃声、报警声不被包含。文章还详细介绍了audio_policy.conf配置文件中的关键设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考博客:

 https://blog.youkuaiyun.com/yangwen123/article/details/39497375

 http://www.cnblogs.com/albert1017/p/3940010.html

 

/Codebase/device/linaro/hikey/audio/audio_policy.conf

在Andorid音频开发中,我们会看到叫做 REMOTE_SUBMIX 的音频类型,相应地在底层会有 AUDIO_DEVICE_OUT_REMOTE_SUBMIX 和 AUDIO_DEVICE_IN_REMOTE_SUBMIX 音频设备,在 audio_policy.conf 配置文件中也能看到 r_submix 设备。这次在开发中终于看到了这类音频的使用场景——使设备通过 WiFi 向 ChromeCast 设备传输 HDMI 数据(HDMI 同时含有视频数据和音频数据)。

REMOTE_SUBMIX 表示被传输至远程接收设备(比如 WiFi 显示器,这次开发中使用的就是将 ChromeCast 设备接到一个显示器上)的音频,这类音频数据流会被重定向至远程输出而非在本地扬声器或耳机播放。但如果这其中包含了 STREAM_RING、STREAM_ALARM、STRAM_NOTIFICATION 这类音频数据,被包含的这些数据不会被发送到远程。

# Global configuration section: lists input and output devices always present on the device
# as well as the output device selected by default.
# Devices are designated by a string that corresponds to the enum in audio.h

global_configuration {
  attached_output_devices AUDIO_DEVICE_OUT_CUSTOM|AUDIO_DEVICE_OUT_SPEAKER
  default_output_device AUDIO_DEVICE_OUT_SPEAKER
  attached_input_devices AUDIO_DEVICE_IN_BUILTIN_MIC|AUDIO_DEVICE_IN_REMOTE_SUBMIX
}

#全局配置部分:列出了设备上总是存在的输入输出设备,它也是系统默认选择的输出设备
#这里的输入输出设备必须是audio.h中列出的枚举类

attached_output_devices:已连接的输出设备;
default_output_device:默认输出设备;
attached_input_devices:已连接的输入设备;


# audio hardware module section: contains descriptors for all audio hw modules present on the
# device. Each hw module node is named after the corresponding hw module library base name.
# For instance, "primary" corresponds to audio.primary.<device>.so.
# The "primary" module is mandatory and must include at least one output with
# AUDIO_OUTPUT_FLAG_PRIMARY flag.
# Each module descriptor contains one or more output profile descriptors and zero or more
# input profile descriptors. Each profile lists all the parameters supported by a given output
# or input stream category.
# The "channel_masks", "formats", "devices" and "flags" are specified using strings corresponding
# to enums in audio.h and audio_policy.h. They are concatenated by use of "|" without space or "\n".

#audio hardware module部分:包含了对设备上的所有的audio hw modules的descriptors,每一个hw module节点
#的名字都与相应的so库名称相对应,例如:"primary"对应audio.primary.<device>.so。其中"primary"module是
#必须的,而且它必须包含一个含AUDIO_OUTPUT_FLAG_PRIMARY标志的output,每一个module的descriptor必须至少
#包含一个output配置descriptor和大于等于0个的input配置descriptor,每一个配置都描述了输入输出流类型支持
#的参数,其中的 "channel_masks"、"formats"、"devices"和"flags"必须为audio.h、audio_policy.h中定义的枚
#举值,它们可以通过|连接,但不能包含空格和"\n"。

audio_hw_modules {
  primary {
    outputs {
      primary {
        sampling_rates 48000
        channel_masks AUDIO_CHANNEL_OUT_STEREO
        formats AUDIO_FORMAT_PCM_16_BIT
        devices AUDIO_DEVICE_OUT_SPEAKER|AUDIO_DEVICE_OUT_WIRED_HEADSET|AUDIO_DEVICE_OUT_AUX_DIGITAL|AUDIO_DEVICE_OUT_WIRED_HEADPHONE|AUDIO_DEVICE_OUT_ALL_SCO
        flags AUDIO_OUTPUT_FLAG_PRIMARY
      }
    }
    inputs {
      primary {
        sampling_rates 8000|11025|12000|16000|22050|24000|32000|44100|48000
        channel_masks AUDIO_CHANNEL_IN_MONO
        formats AUDIO_FORMAT_PCM_16_BIT
        devices AUDIO_DEVICE_IN_BUILTIN_MIC|AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET|AUDIO_DEVICE_IN_WIRED_HEADSET
      }
    }
  }
  a2dp {
    outputs {
      a2dp {
        sampling_rates 44100
        channel_masks AUDIO_CHANNEL_OUT_STEREO
        formats AUDIO_FORMAT_PCM_16_BIT
        devices AUDIO_DEVICE_OUT_ALL_A2DP
      }
    }
  }
  usb {
    outputs {
      usb_accessory {
        sampling_rates 44100
        channel_masks AUDIO_CHANNEL_OUT_STEREO
        formats AUDIO_FORMAT_PCM_16_BIT
        devices AUDIO_DEVICE_OUT_USB_ACCESSORY
      }
      usb_device {
        sampling_rates dynamic
        channel_masks dynamic
        formats dynamic
        devices AUDIO_DEVICE_OUT_USB_DEVICE
      }
    }
    inputs {
      usb_device {
        sampling_rates dynamic
        channel_masks dynamic
        formats dynamic
        devices AUDIO_DEVICE_IN_USB_DEVICE
      }
    }
  }
  r_submix {
    outputs {
      submix {
        sampling_rates 48000
        channel_masks AUDIO_CHANNEL_OUT_STEREO
        formats AUDIO_FORMAT_PCM_16_BIT
        devices AUDIO_DEVICE_OUT_REMOTE_SUBMIX
      }
    }
    inputs {
      submix {
        sampling_rates 48000
        channel_masks AUDIO_CHANNEL_IN_STEREO
        formats AUDIO_FORMAT_PCM_16_BIT
        devices AUDIO_DEVICE_IN_REMOTE_SUBMIX
      }
    }
  }
}

定义了系统支持的所有音频接口参数信息,比如primary、a2dp、usb、r_submix。每种音频接口包含输入输出,每种输入输出又包含多种输入输出配置,每种输入输出配置又支持多种音频设备。

<think>好的,我需要回答用户关于MTK平台中r_submix数据流在audiohal之后是否传递给投屏端的问题。首先,我需要理解r_submixAndroid系统中的作用。根据引用[2],REMOTE_SUBMIX用于从音频输出混音线路捕获数据,通常用于系统音频录制或实时处理。在MTK平台上,r_submix的实现可能涉及audiohal层,这是硬件抽象层的一部分,负责处理音频设备的具体操作。 接下来,用户想知道数据流在audiohal之后是否传递给投屏端。根据引用[3],REMOTE_SUBMIX的实现包括创建输入和输出设备,输出设备可能用于采集数据。在MTK的流程中,audiohal处理后的数据可能通过r_submix的输出设备传输到投屏端,例如Miracast或DLNA。这涉及到音频数据从系统混音输出到网络传输的过程,需要确认MTK是否将r_submix的输出设备配置为投屏的音频源。 另外,引用[5]提到audio_policy.conf文件定义了音频接口参数,其中可能包括r_submix的配置。如果MTK的配置文件中将r_submix作为投屏的音频输入源,那么数据流在audiohal处理后会被传递到投屏模块,进而发送到接收端。因此,需要检查MTK的audio_policy.conf中是否有相关配置,确认数据流向。 总结来说,r_submix在MTK平台中可能通过audiohal处理后,由系统将音频数据路由到投屏模块,但具体实现需参考MTK的文档或代码。用户可能需要检查配置文件或联系MTK支持以获得确切信息。</think>在MTK平台中,`r_submix`数据流经过`audiohal`(音频硬件抽象层)处理后,**会通过系统级音频路由机制传递给投屏端**。以下是具体流程分析: --- ### 1. **r_submixAndroid系统中的作用** `r_submix`是Android系统中用于捕获系统混音输出的虚拟音频设备,其核心功能是: - 捕获所有输出到扬声器或耳机的音频数据(包括应用播放的音频、系统提示音等)[^2]。 - 通过`AUDIO_DEVICE_OUT_REMOTE_SUBMIX`和`AUDIO_DEVICE_IN_REMOTE_SUBMIX`实现输入输出闭环,形成虚拟音频管道[^4]。 --- ### 2. **MTK平台中r_submix的数据流路径** 在MTK芯片的Android系统中,`r_submix`的数据流向可概括为: ``` 应用层音频输出 → AudioFlinger混音 → audiohal处理 → r_submix输出设备 → 投屏端网络传输 ``` - **audiohal处理阶段**:MTK的音频硬件抽象层(如`libaudio.primary.mtXXXX.so`)负责将混音后的PCM数据传递给`r_submix`输出设备[^5]。 - **投屏端传输**:`r_submix`输出的数据会被投屏协议栈(如Miracast、DLNA)捕获,封装为网络流媒体并发送到接收端[^3]。 --- ### 3. **关键配置验证** 需通过以下配置确认数据流是否完整传递: 1. **audio_policy.conf文件**:检查是否启用`r_submix`输出设备: ```conf audio_hw_modules { r_submix { outputs { submix_output { sampling_rates 48000 channel_masks AUDIO_CHANNEL_OUT_STEREO formats AUDIO_FORMAT_PCM_16_BIT } } inputs { submix_input { sampling_rates 48000 channel_masks AUDIO_CHANNEL_IN_STEREO formats AUDIO_FORMAT_PCM_16_BIT } } } } ``` 若存在此类配置,则`r_submix`已作为合法音频设备注册[^5]。 2. **投屏服务绑定**:投屏服务需声明使用`AUDIO_SOURCE_REMOTE_SUBMIX`作为音频源,确保从`r_submix`读取数据。 --- ### 4. **常见问题排查** - **无音频传输**:检查`dumpsys audio`中`r_submix`设备状态是否为`ACTIVE`。 - **音频延迟**:可能因网络传输或投屏协议栈缓冲导致,需优化编码参数或缓冲区大小。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值