You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:04:30