【问题标题】:What does packing nal packets mean?打包最终数据包是什么意思?
【发布时间】:2014-05-28 07:29:02
【问题描述】:

我一直在尝试使用来自this question 的信息来解决类似的问题。

但是,从答案来看;我不确定以下内容是什么意思:

我没有正确打包原始 NAL 数据(不确定这是在哪里 记录,如果有的话)。

甚至是这个包装问题的解决方案。

为了解决 #2,通过反复试验,我发现给我的 NAL 单位 以下形式起作用:

[7 8 5] [1] [1] [1]..... [7 8 5] [1] [1] [1]..... (repeating)

每个 NAL 单元都以 32 位起始码为前缀,等于 0x00000001.

我已经看到关于 nal 数据包的类似表述。上面链接中的原始帖子有一个声明:

我的 NAL 流仅包含 SPS/PPS/IDR/P NAL (1, 5, 7, 8)

再次,这是什么意思?如何在 Objective-C 中正确打包原始 NAL 数据? 任何帮助将不胜感激。

【问题讨论】:

    标签: objective-c video-capture h.264 pack


    【解决方案1】:

    它被称为H.264 Annex B byte stream format(在 ISO/IEC 14496-12 中定义)。 http://wiki.multimedia.cx/?title=H.264

    我认为,下面的页面有很好的解释: http://gentlelogic.blogspot.kr/2011/11/exploring-h264-part-2-h264-bitstream.html

    有很多关于这个的开源实现(虽然不容易重用)。


    NAL AU 是封装编码帧数据的数据单元。它由标题(起始代码)、类型、长度和正文部分组成。

    SPS/PPS/IDR/P 是帧类型。

    SPS:关于整个流的配置信息(编码方法、参数等)
    PPS:关于图片的配置信息(宽度、高度等)
    IDR:设置解码器的特殊帧/数据包
    P : 通常的编码帧数据

    普通电影文件的帧序:SPS(一次) PPS(一次) IDR(周期性) P(实际画面) P P P P P IDR P P P P P P ...


    对于附件B字节流处理,Intel IPP代码示例是很好的参考(umc_h264_nal_spl.cpp)。 目前免费下载(最新版30天免费评估)。
    https://software.intel.com/en-us/articles/code-samples-for-intel-integrated-performance-primitives-intel-ipp-library-71

    附录 B 字节流格式描述了如何将 H.264 编码的帧数据存储在媒体容器(如 mp4、MPEG 2 TS)中。处理容器格式的二进制数据也需要很多艰苦的工作。每个容器使用不同的机制来指定编解码器配置。如相关 SO 帖子 (AVAssetWriterInput H.264 Passthrough to QuickTime (.mov) - Passing in SPS/PPS to create avcC atom?) 所述,mp4/mov 使用其他 ISO/IEC 文档中定义的 avcc 框格式。

    【讨论】:

    • 感谢 9dan。我看过 xmbc、vlc、ffmpeg 等……;很多等等。哈哈。但试图让它与 OSX 框架一起工作一直是我的问题。经过大量搜索,我认为在格式化描述符、样本缓冲区、解压缩和解码之前,我没有正确“打包”我的数据。你给我发了一些很棒的资源。这将是数百页的阅读,但我想我应该首先从这些文档开始。再次感谢。
    • @user2517182 更新了我的帖子并添加了一些注释。
    猜你喜欢
    • 2018-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-08
    • 2012-06-09
    • 2015-08-21
    • 1970-01-01
    • 2015-11-27
    相关资源
    最近更新 更多