我使用的是 Android 版本 4.2+ 的 Nexus 7。所以根据Android 支持的媒体格式 http://developer.android.com/guide/appendix/media-formats.html#core支持所有列出的编码器和容器格式。
现在我想使用录制音频AAC-LC编码器 http://developer.android.com/reference/android/media/MediaRecorder.AudioEncoder.html#AAC和MPEG-4 容器格式 http://developer.android.com/reference/android/media/MediaRecorder.OutputFormat.html#MPEG_4(文件类型)。
在生成的文件中,当我在十六进制编辑器中打开它时,我看到该文件是ISO 基础媒体文件 http://jaadec.sourceforge.net/specs/ISO_14496-12_ISOBMFF.pdf拥有isom
文件类型盒(第 4.3 节)具有以下兼容品牌:isom
and 3gp4
。文件的其余部分主要是mdat
框(包含实际的音频数据)。文件开头的以下十六进制片段告诉我这一点:
00000018 66747970 69736F6D 00000000 69736F6D 33677034 00029708 6D646174 ...
翻译为:
24 ftyp isom no-minor isom 3gp4 0x29708 mdat ...
意思是:
文件 (ftyp
) 符合 ISO/IEC 14496-12 (isom
)并且没有指定次要版本。与此文件兼容的品牌有:isom
and 3gp4
。然后是音频数据框(mdat)的长度0x29708
告诉我这是 AAC-LC(AAC 低复杂度)编码文件的部分在哪里?
此外,与其他 AAC-LC 文件相比web http://download.wavetlan.com/SVV/Media/HTTP/http-aac.htm他们的标题(文件框)是不同的mp42
as ftyp
and 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);