zoukankan      html  css  js  c++  java
  • mpeg4视频中,I帧、p帧、B帧的判定

    mpeg4的每一帧开头是固定的:00 00 01 b6,那么我们如何判断当前帧属于什么帧呢?在接下来的2bit,将会告诉我们答案。注意:是2bit,不是byte,下面是各类型帧与2bit的对应关系:

      00: I Frame
      01: P Frame
      10: B Frame 

    为了更好地说明,我们举几个例子,以下是16进制显示的视频编码:

      00 00 01 b6 10 34 78 97 09 87 06 57 87 ……                             I帧

      00 00 01 b6 50 78 34 20 cc 66 b3 89 ……                                  P帧

      00 00 01 b6 96 88 99 06 54 34 78 90 98 ……                              B帧

    下面我们来分析一下为什么他们分别是I、P、B帧

      0x10 = 0001 0000

      0x50 = 0101 0000

      0x96 = 1001 0100 

    大家看红色的2bit,再对照开头说的帧与2bit的对应关系,是不是符合了呢?

    下面给出一段c++代码供大家参考:

    switch(buf[i] & (BYTE)0xc0)
    {
    case 0x00:
        
    //I Frame
        break;
    case 0x40:
        
    //P Frame
        break;
    case 0x80:
        
    //B Frame
        break;
    default:
        
    break;
    }

     

  • 相关阅读:
    find 以及linux 和windows 文件互传
    27 关于Object类 -- equals()
    26 super关键字
    25 访问修饰符限定词
    24 继承 子类中方法重写
    23 static 关键字
    22 包(package)来解决不同包下同名文件的冲突问题
    21 封装(get,set方法)
    20 带参构造方法(this关键字)
    19 无参构造方法
  • 原文地址:https://www.cnblogs.com/ManMonth/p/1666328.html
Copyright © 2011-2022 走看看