【问题标题】:where to look for vps,sps,pps of Hevc mp4 format in DirectShow filter?在 DirectShow 过滤器中在哪里寻找 Hevc mp4 格式的 vps、sps、pps?
【发布时间】:2015-07-13 13:32:57
【问题描述】:

我已经成功地使用 ffmpeg 创建了 Hevc/mp4 比特流。但是在十六进制编辑器中分析后,我无法在 mp4 文件中找到 VPS、SPS、PPS 数据。

然后我使用了 LAV 拆分器并检查了拆分器的输出,但它发送的是第一帧的数据而不是 VPS/SPS/PPS 数据。即使我已经通过this link,但没有得到任何东西。那么在 DirectShow 过滤器中哪里可以找到 Hevc/mp4 格式的 VPS、SPS、PPS 呢?

【问题讨论】:

    标签: directshow mp4 hevc


    【解决方案1】:

    无法帮助您使用 directshow,但您可以使用任何十六进制编辑器在 mp4 文件中查找 HEVC VPS、SPS 和 PPS 数据。

    首先,您需要找到 moov 框,它要么非常靠近文件的开头,要么非常靠近结尾。它由 4 个 ascii 字符标识:'moov'

    在此之后的一些字节,应指示一个 hvcC 框。

    这之后的数据提供了有关 mp4 文件中 hevc 流的一般信息。其格式在 ISO/IEC 14496-15 中定义。简而言之,跳过接下来的 22 个字节。

    然后,像这样解析以下数据:

    unsigned int(8) numOfArrays;
    for (j=0; j < numOfArrays; j++) {
        bit(1) array_completeness;
        unsigned int(1) reserved = 0;
        unsigned int(6) NAL_unit_type;
        unsigned int(16) numNalus;
        for (i=0; i< numNalus; i++) {
            unsigned int(16) nalUnitLength;
            bit(8*nalUnitLength) nalUnit;
        }
    }
    

    然后每个数组对应于一种类型的一组 NAL 单元,例如一组 SPS。对于 VPS、SPS 和 PPS,您需要 NAL_unit_type 分别等于 32、33 和 34 的数组。

    在我用作示例的内容中,您已经可以看到有 4 个数组可用。第一个数组是一组 NAL 单元,NAL_unit_type=32(=0x20),所以是 SPS。仅存在一个 SPS,其长度为 0x0018=24 字节。 SPS 数据以 0x40010C01 开头。

    【讨论】:

    • @Bastian35022 谢谢。我知道了,也可以直接表演。
    猜你喜欢
    • 2011-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    相关资源
    最近更新 更多