allow playback capture for AudioTrack from hdmiin !
时间: 2024-02-07 12:04:00 浏览: 26
要允许从HDMI输入播放捕获到AudioTrack,您需要使用AudioPolicyService来配置音频策略。以下是一些步骤:
1. 创建一个名为audio_policy.conf的文本文件,并将其放在/system/etc/目录中。
2. 在audio_policy.conf文件中,为HDMI输入定义一个AudioProfile,例如:
```
profile "hdmi_in_playback" {
formats AUDIO_FORMAT_PCM_16_BIT
rates 44100
channel_masks AUDIO_CHANNEL_OUT_STEREO
devices AUDIO_DEVICE_IN_HDMI
}
```
此配置文件定义了一个名为“hdmi_in_playback”的音频配置文件,它支持16位PCM格式,采样率为44100Hz,双声道输出,并使用HDMI输入设备。
3. 更新AudioPolicyService的配置,使其支持新的音频配置文件。在设备上运行以下命令:
```
adb shell service call audio 3 i32 0 i32 1 s16 "your_package_name" s16 "your_audio_policy.conf_file_path"
```
这将更新AudioPolicyService的配置,并使其支持新的音频配置文件。
4. 在您的代码中使用AudioTrack对象,并使用“hdmi_in_playback”配置文件进行初始化:
```
AudioTrack track = new AudioTrack.Builder()
.setAudioAttributes(new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_MEDIA)
.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
.build())
.setAudioFormat(new AudioFormat.Builder()
.setEncoding(AudioFormat.ENCODING_PCM_16BIT)
.setSampleRate(44100)
.setChannelMask(AudioFormat.CHANNEL_OUT_STEREO)
.build())
.setBufferSizeInBytes(bufferSize)
.setTransferMode(AudioTrack.MODE_STREAM)
.setPerformanceMode(AudioTrack.PERFORMANCE_MODE_LOW_LATENCY)
.setSessionId(AudioSystem.newAudioSessionId())
.setOffloadedPlayback(true)
.setOffloadDelayFrames(0)
.setOffloadPositionUpdateListener(null, null)
.setPreferredDevice(AudioDeviceInfo.TYPE_HDMI)
.build();
```
这将使用“hdmi_in_playback”配置文件初始化AudioTrack对象,并将首选设备设置为HDMI输入设备。
请注意,这些步骤可能因设备和Android版本而异。在实施此解决方案之前,请确保您已经了解了相关文档和API,并且已经进行了适当的测试。