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 格式中,如 m4a
或 mp4
.
MediaPlayer(奇怪)不播放原始 aac 数据,但不希望包含原始 mp3
。
注:
当放置在上述其中一个中时,您将丢失每个帧的 ADTS header(因为该信息现在将存在于容器元数据的其他部分中)。
我使用下面的代码生成了一个 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 格式中,如 m4a
或 mp4
.
MediaPlayer(奇怪)不播放原始 aac 数据,但不希望包含原始 mp3
。
注:
当放置在上述其中一个中时,您将丢失每个帧的 ADTS header(因为该信息现在将存在于容器元数据的其他部分中)。