C# 从原始mpeg4流获取帧维度?

C# 从原始mpeg4流获取帧维度?,c#,video-processing,mpeg-4,C#,Video Processing,Mpeg 4,有人知道如何从原始视频比特流检索mpeg4视频(非h264,即mpeg4第2部分)的帧尺寸吗? 我目前正在为Windows MediaFoundation编写自定义媒体源,我必须提供一个需要帧大小的媒体。没有它就不能工作。 有什么想法吗? 谢谢我不明白你的意思。您是否试图了解正在播放的视频的宽度和高度?如果是这样的话(我猜这就是你要寻找的“维度”),下面是如何做到的: 解析此整数的流000001B0(十六进制)它始终是您得到流的第一件事。如果没有,请查看流的SDP(如果有的话,请搜索config

有人知道如何从原始视频比特流检索mpeg4视频(非h264,即mpeg4第2部分)的帧尺寸吗? 我目前正在为Windows MediaFoundation编写自定义媒体源,我必须提供一个需要帧大小的媒体。没有它就不能工作。 有什么想法吗?
谢谢

我不明白你的意思。您是否试图了解正在播放的视频的宽度和高度?如果是这样的话(我猜这就是你要寻找的“维度”),下面是如何做到的:

  • 解析此整数的流
    000001B0
    (十六进制)它始终是您得到流的第一件事。如果没有,请查看流的SDP(如果有的话,请搜索
    config=
    字段,它就在那里…只是现在它是一个Base16字符串
  • 读取所有字节,直到得到整数
    000001B6
    (十六进制)
  • 您应该得到这样的结果(十六进制):
    000001B0F500001B58913000001000001200086C40FA28 A021E0A2
  • 这是“流配置头”或帧,确切的名称是视频对象序列。它包含解码器解码视频流所需的所有信息
  • 读取最后4个字节(在我的示例中,它们由一个空格分隔--
    A021E0A2
  • 现在将这些字节看作一个32位无符号整数
  • 要获得宽度请读取前8位,然后将得到的值乘以4
  • 跳过接下来的7位
  • 要获得高度请读取下一个9位
  • 在伪代码中:

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

  • 这就是…宽度和高度。(:

    这是正确的吗?我正在尝试解码一个我知道是1280x1024的流的帧。根据这个逻辑,宽度不能超过1020,高度不能超过511。宽度应该乘以8而不是4,从最后5个字节读取的整数也应该乘以2而不是4个字节。