Android MediaRecorder&;跨AAC格式设备的MediaPlayer兼容性问题

Android MediaRecorder&;跨AAC格式设备的MediaPlayer兼容性问题,android,cross-platform,android-mediaplayer,mediarecorder,Android,Cross Platform,Android Mediaplayer,Mediarecorder,我们使用Android自带的MediaRecorder和MediaPlayer来录制和播放语音信息,但一些用户表示他们无法播放语音信息。例如,在三星手机上录制的信息不能在OnePlus或诺基亚手机上播放 因此,我们尝试将编解码器从AAC改为HE_AAC,这解决了一些用户的问题,但一些手机型号之间仍然存在兼容性问题 mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.HE_AAC) 昨天,我们尝试用exoPlayer替换MediaP

我们使用Android自带的MediaRecorder和MediaPlayer来录制和播放语音信息,但一些用户表示他们无法播放语音信息。例如,在三星手机上录制的信息不能在OnePlus或诺基亚手机上播放

因此,我们尝试将编解码器从AAC改为HE_AAC,这解决了一些用户的问题,但一些手机型号之间仍然存在兼容性问题

mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.HE_AAC) 
昨天,我们尝试用exoPlayer替换MediaPlayer类。某些手机无法播放的音频文件现在可以播放,但并非所有音频文件都可以播放

有什么建议吗

我们的代码非常常见。它在大多数情况下都有效。我们测试了我们从不同手机记录的所有文件,包括有问题的手机。所有这些都可以在Windows浏览器上播放

MediaRecorder:

        mediaRecorder = new MediaRecorder();
        file = new File(context.getCacheDir(), Long.toString(System.currentTimeMillis()) + ".aac");
        recorderPath = file.getAbsolutePath();

        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.HE_AAC);
        mediaRecorder.setOutputFile(recorderPath);

        try {
            mediaRecorder.prepare();
            mediaRecorder.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
MediaPlayer:

    private void play() {
           if (mediaPlayer == null) {
                mediaPlayer = MediaPlayer.create(context, Uri.parse(path));

                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
                    mediaPlayer.setAudioAttributes(new AudioAttributes.Builder()
                            .setUsage(AudioAttributes.USAGE_MEDIA)
                            .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                            .setLegacyStreamType(AudioManager.STREAM_MUSIC)
                            .build());
                } else {
                    mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
                }
                mediaPlayer.setOnPreparedListener(this::onPrepared);
                mediaPlayer.setOnCompletionListener(this::onCompletion);
            }
    }

    @Override
    public void onPrepared(MediaPlayer mp) {
        mp.start();
    }

    @Override
    public void onCompletion(MediaPlayer mp) {
        mediaPlayer.reset();
        mediaPlayer.release();
        mediaPlayer=null;
    }