Android 可以播放 ADTS AAC 文件吗?

Can Android play a ADTS AAC file?

我使用下面的代码生成了一个 aac 音频文件。该文件在我的 windows 机器上播放良好。但是它无法在我的 android 设备上使用 MediaPlayer 播放。我应该怎么做才能使文件可以在 android 设备上播放?谢谢!

    MediaRecorder recorder = new MediaRecorder();
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.AAC_ADTS);
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
    recorder.setAudioEncodingBitRate(16 * 44100);
    recorder.setAudioSamplingRate(44100);
    recorder.setAudioChannels(2);
    recorder.setOutputFile(mTempFile.getAbsolutePath());

"Can Android play a ADTS AAC file?..."

不适用于默认应用。仅当您编写这样的应用程序时。使用 MediaCodec API 手动将每个 aac 帧的字节发送到解码器。

如果您可以处理字节并且熟悉 aac 帧结构,那么检查这些作为起点:

Decoding AAC using MediaCodec API on Android

PCM -> AAC (Encoder) -> PCM(Decoder) in real-time with correct optimization

"But it cannot be played on my android device using a MediaPlayer... What should I do to make the file playable on a android device?..."

aac 数据必须存在于 container 格式中,如 m4amp4.
MediaPlayer(奇怪)不播放原始 aac 数据,但不希望包含原始 mp3

注:
当放置在上述其中一个中时,您将丢失每个帧的 ADTS header(因为该信息现在将存在于容器元数据的其他部分中)。