Android Things树莓派3上MediaPlayer无法播放音频问题求助
我之前在Android Things树莓派3上踩过音频输出的坑,跟你遇到的情况几乎一样!给你几个实用的排查和解决方向:
1. 先搞定硬件和系统层面的音频路由
树莓派3的Android Things默认音频输出可能不是你预期的设备,比如默认走HDMI还是3.5mm插孔,这是最常见的无声诱因:
- 你可以通过代码强制指定音频输出设备,比如优先用3.5mm插孔:
AudioManager audioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); // 遍历所有可用输出设备,锁定有线耳机/3.5mm插孔 for (AudioDeviceInfo device : audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS)) { if (device.getType() == AudioDeviceInfo.TYPE_WIRED_HEADSET || device.getType() == AudioDeviceInfo.TYPE_WIRED_HEADPHONES) { audioManager.setPreferredDevice(device); break; } } // 若要切换HDMI输出,只需匹配TYPE_HDMI类型的设备 - 也可以用adb命令快速验证:先执行
adb shell dumpsys audio查看当前音频设备列表,再用adb shell media volume --stream 3 --set 10拉满媒体音量(避免静音),然后测试播放。
2. MediaPlayer的细节调整(别忽略回调!)
虽然MediaPlayer的API和常规Android一致,但Android Things对初始化流程的要求更严格:
- 一定要等
OnPreparedListener回调触发后再调用start(),直接调用很可能因为资源未加载完成导致无声:MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.your_audio_file); mediaPlayer.setOnPreparedListener(mp -> mp.start()); - 加上错误监听,能快速定位隐性问题:
mediaPlayer.setOnErrorListener((mp, what, extra) -> { Log.e("AudioTest", "MediaPlayer出错:what=" + what + ", extra=" + extra); return false; }); - 尽量用标准格式的音频文件测试(比如WAV、普通MP3),避免特殊编码的文件——Android Things对编码的兼容性比常规Android稍有限制。
3. AudioTrack的参数校验
如果用AudioTrack还是没声音,先确认参数和你的PCM数据完全匹配:
- 采样率、声道数、编码格式必须和你准备的PCM数据一致,举个标准配置的例子:
int sampleRate = 44100; int channelConfig = AudioFormat.CHANNEL_OUT_MONO; int audioFormat = AudioFormat.ENCODING_PCM_16BIT; int bufferSize = AudioTrack.getMinBufferSize(sampleRate, channelConfig, audioFormat); AudioTrack audioTrack = new AudioTrack( AudioManager.STREAM_MUSIC, sampleRate, channelConfig, audioFormat, bufferSize, AudioTrack.MODE_STREAM ); audioTrack.play(); // 这里写入你的PCM数据 audioTrack.write(pcmData, 0, pcmData.length); - 注意:如果是
MODE_STATIC模式,必须先写入数据再调用play(),顺序搞反也会导致无声。
4. 固件版本排查
有些旧版本的Android Things固件存在音频驱动bug,试试升级到最新的稳定版固件,很多无声问题都是固件层面的问题导致的。
内容的提问来源于stack exchange,提问作者MalcolmMcFly
相关产品推荐
相关产品推荐

