我正在使用 Android 4.2+ 的 Nexus 7。因此,根据Android Supported Media Formats ,支持所有列出的编码器和容器格式。
现在我想使用AAC-LC 编码器和MPEG-4 容器格式(文件类型)录制音频。
在生成的文件中,当我在 HEX 编辑器中打开它时,我看到该文件是一个ISO 基础媒体文件,具有isom
文件类型框(第 4.3 节),具有以下兼容品牌:isom
和3gp4
. 文件的其余部分主要是一个mdat
Box(包含实际的音频数据)。文件开头的以下 HEX 片段告诉我这一点:
00000018 66747970 69736F6D 00000000 69736F6D 33677034 00029708 6D646174 ...
翻译为:
24 ftyp isom no-minor isom 3gp4 0x29708 mdat ...
意思是:
文件 ( ftyp
) 符合 ISO/IEC 14496-12 ( isom
) 并且没有指定次要版本。与此文件兼容的品牌是:isom
和3gp4
. 然后跟随有长度的音频数据框(mdat)0x29708
这部分在哪里告诉我这是一个 AAC-LC(AAC 低复杂度)编码文件?
此外,与Web上的其他 AAC-LC 文件相比,它们的标题(文件框)是不同的,提及mp42
和ftyp
, mp42
,isom
作为ndia
兼容品牌。这样的文件也是可流式传输的(AAC-LC 应该如何)。
但 Android 生成的 AAC_LC (MP4) 文件不可流式传输。那么 Android MediaRecorder 或我做错了什么?我正在使用以下代码:
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
// the bit rate should be adjusted silently if out of range
mRecorder.setAudioEncodingBitRate(320000);
mRecorder.setAudioSamplingRate(48000);