【问题标题】:Getting frame dimension from raw mpeg4 stream?从原始 mpeg4 流中获取帧尺寸?
【发布时间】:2010-07-14 14:01:58
【问题描述】:

有谁知道我如何从原始视频比特流中检索 mpeg4 视频(非 h264,即 Mpeg4 第 2 部分)的帧尺寸? 我目前正在为 Windows Media Foundation 编写自定义媒体源,我必须提供需要帧大小的媒体类型。没有它就行不通。 有任何想法吗? 谢谢

【问题讨论】:

    标签: c# video-processing mpeg-4


    【解决方案1】:

    我没有得到你。您是否想知道正在流式传输的视频的宽度和高度?如果是这样(我猜这是您正在寻找的“维度”),方法如下:

    1. 解析该整数000001B0(hex) 的流,它始终是您获得流式传输的第一件事。如果没有,请查看流的 SDP(如果有,然后搜索 config= 字段,它就在那里......只是现在它是一个 Base16 字符串!
    2. 读取所有字节,直到得到整数000001B6(hex)
    3. 你应该得到这样的东西(十六进制):000001B0F5000001B5891300000100000001200086C40FA28 A021E0A2
    4. 这是“流配置标头”或帧或其他名称,确切名称是视频对象序列。它包含解码器解码视频流所需的所有信息。
    5. 读取最后 4 个字节(在我的示例中,它们用一个空格分隔 -- A021E0A2
    6. 现在将这些字节视为一个 32 位无符号整数...
    7. 要获得 width 读取前 8 位,然后 将得到的值乘以 4
    8. 跳过接下来的 7 位
    9. 要获得 height 读取接下来的 9 位
    10. 在伪代码中:

        WIDTH = readBitsUnsigned(array, 8) * 4;
        readBitsUnsigned(array, 7);
        HEIGHT = readBitsUnsigned(array, 9);
      

    你去...宽度和高度。 (:

    【讨论】:

    • 这是正确的吗?我正在尝试解码我​​知道是 1280x1024 的流的帧。按照这个逻辑,宽度不能超过1020,高度不能超过511。
    • WIDTH 应该乘以 8 而不是 4,对于从最后 5 个字节而不是 4 个字节读取的整数,HEIGHT 也应该乘以 2。
    猜你喜欢
    • 1970-01-01
    • 2020-04-19
    • 2011-09-17
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    相关资源
    最近更新 更多