转载自:https://blog.csdn.net/qq_40334837/article/details/81433146

一、H264的NAL单元详解

1、VCL只关心编码部分,重点在于编码算法以及在特定硬件平台的实现

(1)SODB 是VCL输出的是编码后的纯视频流信息,没有任何冗余头信息

2、NAL关心的是VCL的输出纯视频流如何被表达和封包以利于网络传输,

(1)RBSP 是通过SODB封装成nal_unit格式得到的,Nal_unit是一个通用封装格式,可以适用于有序字节流方式和IP包交换方式

具体封装流程:https://blog.csdn.net/d_l_u_f/article/details/7260772

(2)NALU 是针对不同的传送网络(电路交换|包交换),将RBSP 封装成针对不同网络的封装格式(加上NAL header)

3、之间关系:
        SODB  + RBSP trailing bits    = RBSP

NAL header(1 byte) + RBSP     = NALU

RTP封装格式(12个字节) + NALU  =  最后sendto出去的完整包

RBSP就是H.264编码后出来的裸流文件,给文件加上后缀.h264,得到xxx.h264

2、RBSP的内容

2.1、序列 sequence

(1) 一段h.264的码流其实就是多个sequence组成的

(2)一个sequence是一秒,如果FPS等于30,就有30帧图像(I/P/B帧)

(3)每个sequence均有固定结构单元:1sps+1pps+1sei+1I帧+若干p帧(加上B帧一共有6种单元情况)

2.2、分隔符

(1) H.264在编码的时候,生成一个序列时,序列中每个单元前面就会加上00 00 00 01作为分隔符

2.3、分隔符后第一个字节

(1)分隔符后面紧跟着的第一个字节就是用来判断是什么类型的单元

1、第1位禁止位,值为1表示语法出错
          2、第2~3位为参考级别
          3、第4~8为是nal单元类型nal_unit_type(比如是0x67(取5位00111表示sps)

播放器算法解码时,就知道这个字节开始到下一个分隔符之间的数据按照sps类型解析数据

2.4、单元之一:sps(序列参数集:固定14个字节)

(1)序列参数集。SPS中保存了一组编码视频序列(Coded video sequence)的全局参数,所谓的编码视频序列即原始视频的一帧一帧的像素数据经过编码之后的结构组成的序列。而每一帧的编码后数据所依赖的参数保存于图像参数集中

(2)里面包含宏块编码方式、图像大小尺寸、宏块个数,播放器通过这些参数,调用播放器里面的对应算法去解码

(3)具体意义参考博客:https://www.cnblogs.com/wainiwann/p/7477794.html

2.5、单元之二:pps(图像参数集:固定4个字节)

(1)H.264中另一重要的参数集合为图像参数集Picture Paramater Set(PPS),具体位意义参考博客

2.6、单元之三:SEI

(1)也是一些图像的额外信息,帮助播放器解析压缩图像

2.7、单元之四、五、六:I帧、P帧、B帧

(1)I帧是关键,丢了I帧当前sequence就废了,每个sequence有且只有1个I帧

(2)帧内编码帧 ,I帧表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面),I帧大,说明本身压缩比不高,图像数据更完整,则P帧可以越小,反之I帧越小则P帧会越大

(3)P帧:前向预测编码帧。P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)

(4)B帧:双向预测内插编码帧。B帧是双向差别帧,也就是B帧记录的是本帧与前后帧的差别

具体特点参考:https://www.cnblogs.com/cy568searchx/p/6125031.html

3、CBR(固定码率)和VBR(可变码率)(压缩时候一个sequence参考的码率方式)

(1)一个sequence有30个帧,每个帧就是1/30秒,压缩后的字节数不一样,2000到10000+不等,主要看图像动作是否很大

(2)CBR就是牺牲图像清晰度,保证每帧图像字节数变化不会很大,这样码率就能均衡,网络传输也能稳定

(3)VBR就是牺牲码率,动作变化大的时候,参考VBR,帧数据会很大,保证清晰度,不管码率是否稳定,这样在网络传输的时候,网络带宽有限,带宽给的宽,资源限制,给的小,大的帧传输不完,比如I帧,网络就会不稳定

4、相关概念

(1)时间戳

https://blog.csdn.net/wxl1986622/article/details/52758022

H264的NAL单元详解相关推荐

  1. RTMP协议封装H264和H265协议详解

    RTMP协议封装H264和H265协议详解 文章目录 RTMP协议封装H264和H265协议详解 1 RTMP和FLV 2 RTMP协议封装H264视频流 2.1 RTMP发送AVC sequence ...

  2. IMU惯性测量单元详解

    IMU惯性测量单元详解 惯性测量单元的工作原理惯性测量单元的工作原理是:使用一个或多个加速度感应器,探测当前的加速度速率:使用一个或多个偏航陀螺仪,检测在方向.翻滚角度和倾斜姿态上的变化.有一些惯性测 ...

  3. H264/AVC NAL单元和解码

    在264中,NAL是以NALU(NAL unit)为单元来支持编码数据在基于包交换技术网络中的传输的:它定义了符合传输层或存储介质需求的数据格式,同时提供头信息,从而提供了视频编码与外部世界的接口.网 ...

  4. MMU内存管理单元详解

    MMU 诞生之前: 在传统的批处理系统如 DOS 系统,应用程序与操作系统在内存中的布局大致如下图: 应用程序直接访问物理内存,操作系统占用一部分内存区. 操作系统的职责是"加载" ...

  5. RTSP协议详解与实时流视频预览-第6/11季视频课程-海思-朱有鹏-专题视频课程

    RTSP协议详解与实时流视频预览-第6/11季视频课程-海思-383人已学习 课程介绍         本季详细讲解RTSP协议的技术细节,并且编程实现基于RTSP协议的实时视频流传输,在局域网内浏览 ...

  6. RTSP协议详解与实时流视频预览(1)

    目录 一.本季核心技术点 二.H264编码原理和基本概念 1.h.264编码原理 2.h.264编码相关的一些概念 三.H264的NAL单元详解 1.VCL和NAL的关系 2.H.264视频流分析工具 ...

  7. H264学习1 手解NAL单元

    作为一名向进军流媒体行业的工程师,学习H264太过于枯燥一时间理解不了H264的算法概念什么的就先从解析H264的源数据开始吧. 1.文件结构 H264的源文件是由NAL单元组成,一个完整的NAL数据 ...

  8. fmp4打包H264详解

    fmp4打包H264详解 文章目录 fmp4打包H264详解 1 mp4介绍 1.1 基本概念 1.2 常见mp4封装格式 2 各类型box详解 2.1 box构成 2.2 ftyp box 2.3 ...

  9. H264码流RTP封装方式详解

    H264码流RTP封装方式详解 文章目录 H264码流RTP封装方式详解 1 H264基本概念 2 NALU Header介绍 3 RTP封装H264码流 3.1 单一NALU模式 3.2 组合帧封装 ...

  10. 【H264/AVC 句法和语义详解】(二):h264码流格式与NALU详解一

    上一篇中,我们站在句法元素(或称语法元素)的角度,介绍了H.264的句法和语义,和句法元素的分层结构.在这篇中,我们更进一步,从比特的角度出发,来探索h264码流的组成.通过这篇的学习,我们会初步具备 ...

最新文章

  1. 人工智能军备竞赛:一文尽览全球主要国家AI战略
  2. docker image存储路径_使用fluentd作为docker日志驱动收集日志
  3. 邀请参加活动的邀请函_邀请函||王坝镇中心幼儿园邀请家长参加期中分享活动的通知...
  4. C语言函数返回1和返回0究竟哪个好?
  5. c#语言中的变量名,在C#中创建动态变量名
  6. A_Pancers团队项目设计完善编码测试
  7. 学习笔记之centos系统启动流程
  8. ElasticSearch 7 正式发布!
  9. 此内容不能显示在一个框架中_.NET开发框架(二)框架功能简述
  10. windows Delete键和Backspace键的区别
  11. 注射php,手工注射php学习
  12. 《看不见的森林:林中自然笔记》书摘一
  13. 基于JAVA+SpringMVC+Mybatis+MYSQL的快递代收系统
  14. 数字序列 Number Sequence
  15. java输入菱形边长,输出菱形
  16. 解读测试能力素质模型
  17. git 如何将主分支(master)合并到子分支上
  18. python使用什么来表示代码块_Python入门之基本语法
  19. 推荐好用的开源 Docker 工具
  20. webpack简单打包PC网站前端资源

热门文章

  1. 二叉树的非递归遍历实现
  2. Tomcat出现中文乱码
  3. Java实现两个csv文件的对比_比较 csv 文件中数据差异
  4. wav转换mp3简单图文教程
  5. 教师计算机培训汇报ppt,教师培训工作总结ppt模板
  6. catia制作物料明细_CATIA课时:符合GB的物料清单模板设置视频教程_翼狐网
  7. JPA并发save失效
  8. 基于FFT的平面阵列方向图综合
  9. fudannlp初试
  10. js:获取年龄的函数