【问题标题】:What does the Apple segmenter "optimize" option actually do to AAC audio?Apple 分段器“优化”选项实际上对 AAC 音频有什么作用?
【发布时间】:2012-10-27 09:53:52
【问题描述】:

我正在编写一个 Flash 视频播放器来播放 Apple HLS 视频流,我发现任何带有 AAC 音轨的内容都已被 Apple 工具分段并启用了-optimize 选项(现在是默认设置)有一个我无法解码的音轨(同步字节不是我认为它们应该在的位置)。

优化选项对音频有什么作用?是重新编码还是只是包装不同?

最重要的是,我需要做什么才能正确读取音轨?

我已经搜索了几个月,但似乎没有人对此有技术上有用的答案(即除了“它使文件更小”之外的任何答案)。

这似乎只影响音轨,如果我禁用音频解码,视频在所有情况下都可以正常播放,至少到目前为止我所看到的 - Apple 工具、ffmpeg、商业编码器等。

【问题讨论】:

    标签: video http-live-streaming aac mediastreamsegmenter


    【解决方案1】:

    好的,经过一些实验,我想我已经找到了问题的答案。

    通常情况下,AAC 帧被打包,使得(少量)整数 AAC 帧适合单个有效负载单元,大致按 PTS 顺序与它们同步的视频帧交错。然后将这些有效负载单元打包到连续的 188 字节 TS 数据包的有效负载空间中,最后一个 TS 数据包中的空白空间用垃圾填充(即不是数据流的一部分)。这可能意味着在 10 秒的 TS 段中,您可能会有大约 2-6 KB 的开销。

    通过 AAC 优化,两件事似乎发生了变化。

    1. 增加了包含 AAC 帧的有效负载单元的大小,从而减少了有效负载单元的总体数量。
    2. 有效负载单元的大小正好是 TS 数据包中有效负载空间的倍数,而不是适合整个 AAC 帧的数量。

    这意味着几乎消除了填充 - 所有使用的空间都是有价值的数据,因此整体大小减小了。

    此外,这意味着 AAC 帧不再与它们应该同步的视频帧直接相邻 - 实际上它们可能相距相当远。

    然而,这也意味着,单个 Payload Unit 可能无法在最后容纳整个 AAC 框架,因此将适合的框架放入此 Payload Unit,其余部分放在下一个 AAC 有效负载单元的开始 - 这意味着 AAC 有效负载单元可能不会以 AAC 帧同步字节开始! (这就是我所看到的!)

    如果读取的 AAC 帧的长度不足以包含整个标头,或者 AAC 标头中的 AAC 有效负载长度小于剩余的有效负载单元长度,则剩余数据必须在下一个 AAC 有效负载单元中 -但是请注意,这可能会在下一部分中!

    【讨论】:

      猜你喜欢
      • 2016-11-09
      • 2013-08-09
      • 2017-08-08
      • 1970-01-01
      • 1970-01-01
      • 2017-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多