好的,所以经过一些实验,我想我已经找到了我的问题的答案。
通常 AAC 帧被打包,使得(小)数量的 AAC 帧适合单个有效负载单元,大致按 PTS 顺序与它们同步的视频帧交错。然后将这些有效负载单元打包到连续的 188 字节 TS 数据包的有效负载空间中,最后一个 TS 数据包中的空白空间用垃圾填充(即不是数据流的一部分)。这可能意味着在 10 秒的 TS 段中,您可能会有大约 2-6 KB 的开销。
通过 AAC 优化,两件事似乎发生了变化。
- 增加了包含 AAC 帧的有效载荷单元的大小,从而减少了有效载荷单元的总体数量。
- 有效载荷单元的大小是 TS 数据包中有效载荷空间的精确倍数,而不是适合整个 AAC 帧的数量。
这意味着几乎消除了填充 - 所有使用的空间都是有价值的数据,因此整体大小减小了。
此外,这意味着 AAC 帧不再与它们应该同步的视频帧直接相邻 - 实际上它们可能相距相当大的距离。
然而,这也意味着单个 Payload Unit 可能无法在末尾放置整个 AAC 帧,因此将尽可能多的帧放入此 Payload Unit,其余部分放在开头下一个 AAC 有效负载单元 - 这意味着 AAC 有效负载单元可能不会以 AAC 帧同步字节开始!(这就是我所看到的!)
无论读取的 AAC 帧的长度不足以包含整个报头,还是 AAC 报头中的 AAC 有效载荷长度小于剩余的有效载荷单元长度,则剩余数据必须在下一个 AAC 有效载荷单元中 - 但是请注意,这可能在下一个部分!