• RTP 编码 抓包分析


    转自: https://blog.csdn.net/u010386121/article/details/121932023

    H264应用于视频压缩。

    假如正在播放一个1920*1080分辨率的视频,帧率是10帧,如果没有经过压缩,那么一秒产生数据为1920*1080*10/1024/1024=19.77MB,那么这些数据无法接受的,所以需要把数据进行压缩。

    下图看出通过编码呈现的数据



    在这里插入图片描述

    H264相关概念

    1.在H264结构中,一个视频图像编码后数据叫做一帧,一帧由一个片或者多个片组成,一片由一个或者多个宏块(MB)组成,宏块由16*16 YUV数据组成。所以宏块是H264编码基本单元。

    2.H264采用帧内压缩和帧间压缩方式提高编码率

    3.H264采用独特I帧,P帧和B帧策略来实现,连续之间的压缩。

    I帧

    1.I帧是帧内编码帧,I帧表示关键帧,保存一帧完整的画面。

    2.I帧特点:

     它是一个全帧压缩编码帧。它将全帧图像信息进行JPEG压缩编码及传输;
    解码时仅用I帧的数据就可重构完整图像;
    I帧描述了图像背景和运动主体的详情;
    I帧不需要参考其他画面而生成;
    I帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各帧的质量);
    I帧是帧组GOP的基础帧(第一帧),在一组中只有一个I帧;
    I帧不需要考虑运动矢量;
    I帧所占数据的信息量比较大。
     

    P帧:

    1.P帧:前向预测编码帧。P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)
    2.P帧的预测与重构:P帧是以I帧为参考帧,在I帧中找出P帧“某点”的预测值和运动矢量,取预测差值和运动矢量一起传送。在接收端根据运动矢量从I帧中找出P帧“某点”的预测值并与差值相加以得到P帧“某点”样值,从而可得到完整的P帧。
    3.P帧特点:
    1.P帧是I帧后面相隔1~2帧的编码帧;
    2.P帧采用运动补偿的方法传送它与前面的I或P帧的差值及运动矢量(预测误差);
    3.解码时必须将I帧中的预测值与预测误差求和后才能重构完整的P帧图像;
    4.P帧属于前向预测的帧间编码。它只参考前面最靠近它的I帧或P帧;
    5.P帧可以是其后面P帧的参考帧,也可以是其前后的B帧的参考帧;
    6.由于P帧是参考帧,它可能造成解码错误的扩散;
    7.由于是差值传送,P帧的压缩比较高
     

    B帧

        B帧特点
            B帧是由前面的I或P帧和后面的P帧来进行预测的;
            B帧传送的是它与前面的I或P帧和后面的P帧之间的预测误差及运动矢量;
            B帧是双向预测编码帧;
            B帧压缩比最高,因为它只反映两个参考帧间运动主体的变化情况,预测比较准确;
            B帧不是参考帧,不会造成解码错误的扩散。

    3.GOP(画面组)

    1.GOP即Group of picture(图像组),指两个I帧之间的距离(下图所说的视频序列就是GOP),Reference(参考周期)指两个P帧之间的距离,可以理解为跟序列差不多意思,就是一段时间内变化不大的图像集,比较说GOP为120,如果是720 p60 的话,那就是2s一次I帧。一个I帧所占用的字节数大于一个P帧,一个P帧所占用的字节数大于一个B帧。所以在码率不变的前提下,GOP值越大,P、B帧的数量会越多,平均每个I、P、B帧所占用的字节数就越多,也就更容易获取较好的图像质量;Reference越大,B帧的数量越多,同理也更容易获得较好的图像质量。
    2.GOP结构一般有两个数字,如M=3,N=12。M指定I帧和P帧之间的距离,N指定两个I帧之间的距离。上面的M=3,N=12,GOP结构为:IBBPBBPBBPBBI。在一个GOP内I frame解码不依赖任何的其它帧,p frame解码则依赖前面的I frame或P frame,B frame解码依赖前最近的一个I frame或P frame 及其后最近的一个P frame。
     
    4. IDR帧(关键帧)

    1.IDR(Instantaneous Decoding Refresh)即时解码刷新。 在编码解码中为了方便,将GOP中首个I帧要和其他I帧区别开,把第一个I帧叫IDR,这样方便控制编码和解码流程,所以IDR帧一定是I帧,但I帧不一定是IDR帧;IDR帧的作用是立刻刷新,使错误不致传播,从IDR帧开始算新的序列开始编码。I帧有被跨帧参考的可能,IDR不会。
    2.I帧不用参考任何帧,但是之后的P帧和B帧是有可能参考这个I帧之前的帧的。IDR就不允许这样,例如:
     

    在这里插入图片描述

     3.其核⼼作⽤是,是为了解码的重同步,当解码器解码到 IDR 图像时,⽴即将参考帧队列清空,将已解码的数据全部输出或抛弃,重新查找参数集,开始⼀个新的序列。这样,如果前⼀个序列出现重⼤错误,在这⾥可以获得重新同步的机会。IDR图像之后的图像永远不会使⽤IDR之前的图像的数据来解码。


     H264学习分析过程

    以下教程以海思3518ev300为准测试。首先准备裸码流,分辨率为1920*1080 10帧。
    1.首先先分析H264裸码流

    1.H264由一个个NALU组成的,他们结构如下图所示



    每个NALU单元包含多个NAL单元组成,每个NAL单元由NAL头和RBSP组成。



     每个NALU由起始码startcode进行分隔,起始码分割有两种:0x000001(3Byte)或者0x00000001  4Byte组成。

    H264裸码流分析首先先搜索0x000001和0x00000001,分离出NALU;然后分析NALU各个字段。首先我们先通过excel下面查看H264原始hex数据。

     图中橙色就是每个NALU开始码,也是每个NALU分隔符。

    然后绿色67,68,69是NAL头

    NAL单元头部是由forbidden_bit(1bit),nal_reference_bit(2bits)(优先级),nal_unit_type(5bits)(类型)三个部分组成的,组成如下图所示:


     1、F(forbiden):禁止位,占用NAL头的第一个位,当禁止位值为1时表示语法错误;一般为0
    2、NRI:参考级别,占用NAL头的第二到第三个位;值越大,该NAL越重要。
    3、Type:Nal单元数据类型,也就是标识该NAL单元的数据类型是哪种,占用NAL头的第四到第8个位,具体NAL type内容如下图所示


     0x67转成二进制为01100111,第一位为0,第二三位为3,代表优先级最高,第4-8位为7,按照上面表格参考为SPS

    0x68转成二进制为01101000,第一位为0,第二三位是3,代表优先级最高,第4-8位为8,按照上面表格参考为PPS

    0x69转成二进制为01101001,第一位为0,第二三位是3,代表优先级最高,第4-8位为9,按照上面表格参考为RBSP。

    RBSP

    RBSP由SODB+结尾比特位组成。

    SODB: 数据比特串,是编码后的原始数据

    RBSP: 原始字节序列载荷,是在原始编码数据后面添加了结尾比特,一个bit“1”和若干个比特“0”,用于字节对齐。

     



     
    H264在网络中传输

    在UDP或者TCP单次发包过程中,每次MTU为1500字节,所以当单次传输NALU时,有可能数据包大小大于MTU(1500字节),所以要进行切包传输。

    分为以下两种情况:

    当NALU Size小于MTU时,整个NALU包可以发送

    当NALU Size 大于MTU时,需要切包发送。

    H264裸码流数据在网络中传输会转成RTP传输格式,格式如下图所示


     RTP = RTP header + H264payload

    RTP Header

    RTP header是由12个字节组成,具体数据格式如下图所示


     
    FU identifier和FU header


     下面我们从wireshark解析一包UDP数据可知,以下是解析出来的数据。

     由下图可以看出,H264 NAL Unit payload数据格式由一个个NALU组成。

     

  • 相关阅读:
    全角 半角转换 .net
    [下载]微软Windows命令行PowerShell 2.0
    logstash收集java程序日志
    使用filebeat替代logstash收集日志
    Kibanna图形统计
    MySQL Blind Sql Injection
    超级后门泄露版
    HACKING WITH JAVASCRIPT
    Exploiting Common Vulnerabilities in PHP Applications
    3389安全记录批处理
  • 原文地址:https://www.cnblogs.com/sam123/p/16397085.html
Copyright © 2020-2023  润新知