android - Android 可以播放 ADTS AAC 文件吗?

标签 android audio android-mediaplayer mp4 aac

我使用下面的代码生成了一个 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用于手动将每个 aac 帧的字节发送到解码器的 API。

如果您可以处理字节并熟悉 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 数据必须存在于 m4amp4容器格式内。
MediaPlayer (奇怪的是)不播放原始 aac 数据,但也不期望包含原始 mp3

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

关于android - Android 可以播放 ADTS AAC 文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41390192/

相关文章:

java - 如何在 Android Studio 的 Java 模块中配置 Groovy

android - 使用 Retrofit2 和 rxJava2 处理没有主体的响应

matlab - Matlab 中的噪声消除

java - 从另一个 Activity 停止/启动媒体播放器

android - Xamarin Android 仅在手机上将方向锁定为纵向

android - 自动 gradle 下载而不是 cordova 中的本地 gradle

c# - 如何在C#中实现钢琴键频功能?

python - 如何在视频中添加音频?

java - 使用媒体播放器更新进度条

android - 任何人都有 MediaPlayer 使用 ParcelFileDescriptor 和 createPipe()?