修改android中的aac-mp4音频(mediaCodec / extractor)

时间:2017-01-13 12:19:07

标签: android mediacodec mediaextractor

我想修剪现有的aac-mp4音频文件。我第一次想“修剪”0个字节,基本上只是使用MediaCodec / MediaExtractor来复制文件。

问题:

  1. 标题是固定大小的,我只能从旧文件中复制它?或者它有关于轨道持续时间的一些信息,我需要更新它?如果它具有固定大小(为了知道我应该从旧文件中复制多少字节)?
  2. 我应该只使用提取器的getSampleData(ByteBuffer,offset)和advance(),或者我还应该使用MediaCodec并提取样本(解码)然后再用编码器对它们进行编码 - 并写入编码值?

1 个答案:

答案 0 :(得分:3)

  1. 如果您使用MediaExtractor,您可能不会自己阅读原始文件,因此我看不到您要复制的标题。这可能是MediaExtractor + MediaMuxer最容易做到的;只需将MediaFormat和从MediaExtractor获得的数据包复制到MediaMuxer。

  2. 这取决于您希望如何进行修剪。完全不涉及MediaCodec是绝对最简单的,只需将数据包从MediaExtractor复制到MediaMuxer,并在开始时跳过要省略的数据包(或使用seekTo()寻找正确的起始位置)。

  3. 但请记住,音频帧有一定的长度;对于AAC-LC,它通常是1024个样本,48 kHz的音频是21毫秒。因此,如果您只复制单个数据包,则对于48 kHz,您无法获得比21毫秒更接近的微调粒度。对于大多数情况,这可能很好,但如果音频采样率较低,例如8 kHZ,则粒度最高可达128 ms。

    如果您希望修剪到比单个数据包允许的位置更精确的位置,则需要使用MediaCodec进行解码,跳过适量的采样,将解码器的输出帧重新打包为编码器的新全帧,并进行编码此