【问题标题】:16 byte align AAC encoded data16 字节对齐 AAC 编码数据
【发布时间】:2023-04-08 02:12:01
【问题描述】:

我需要使用 FDK 库即时将 ACM 流编码为 AAC ELD。

我的问题是,在我的情况下,AAC 编码数据需要对齐 16 个字节。即它的长度将除以 16。

我不知道该怎么做。 我曾尝试在编码数据的末尾添加 0,直到将其除以 16,然后将其发送到 CBC,但有些解码器不喜欢这样。

我必须将填充添加到 ACC 编码数据中,以使另一端的 ACC 解码器知道如何处理它。

我认为我使用的 AAC 库(FDK 库)没有添加填充的选项,所以我认为我需要自己填充编码的 AAC 数据?

你能告诉我最好和最简单的方法吗

【问题讨论】:

  • 对齐通常是指数据的起始地址,而不是数据的大小。您是否可能误解了要求?
  • 也许我用的词不对,但是是的,我需要编码的 AAC 数据=输出除以 16
  • @user3702017 你的术语很好。为什么你必须添加这个填充?为什么不等到你有下一个 AAC 编码数据的缓冲区,然后相应地分块?
  • 我试过了,但是当我这样做的时候噪音很大,所以我认为这是不可能的。你确定如果 H 是 AAC 编码函数,那么:AAC 解码器眼中的 H(chunk1)+H(chunk2)=H(chunk1+chunk2)?
  • @user3702017 这解决了吗?如果是,请回答...

标签: c++ audio encoding audio-streaming aac


【解决方案1】:

您是否尝试添加 0xE0 (0b11100000) 而不是零?

如果一个字节开始一个帧,它的三个最高位表示块的类型。类型 0b111 表示帧的结束。类型 0 表示单个通道元素,并且需要跟随编码音频,这就是为什么在简单地用零填充时会出错的原因。

【讨论】:

    【解决方案2】:

    AAC 规范中有一个所谓的“填充元素”。但是,您的编码器是否支持它?添加它对你来说非常困难,你基本上需要学习大量的 AAC 双流语法。

    另一方面,是否需要传输整个编码帧?我不明白为什么这是真的。只需在您喜欢的边界上拆分您的流,然后在解码之前将其连接到另一端。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-09-02
      • 1970-01-01
      • 2017-07-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-15
      相关资源
      最近更新 更多