本文来自象棋的 <H.264系列>

1.H264结构中,一个视频图像编码后的数据叫做一帧,一帧由一个片(slice)或多个片组成,一个片由一个或多个宏块(MB)组成。

2.slice三种编码模式:I_slice,P_slice,B_slice

3.根据H.264的不同类别,编码器会使用不同类型的帧,如I帧、P帧和B帧。I帧缺失会导致录屏,B/P帧缺失会导致卡顿

I帧(帧内编码帧)是一种自带全部信息的独立帧,无需参考其它图像便可独立进行解码。视频序列中的第一个帧始终都是I帧。如果所传输的比特流遭到破坏,则需要将I帧用作新查看器的起始点或重新同步点。I帧可以用来实现快进、快退以及其它随机访问功能。如果新的客户端将参与查看视频流,编码器将以相同的时间间隔或者根据要求自动插入I帧。I帧的缺点在于它们会占用更多的数据位,但从另一方面看,I帧不会产生可觉察的模糊现象。I帧是P帧和B帧的参考帧;I帧是组GOP的参考帧,在一组中只有一个I帧;不考虑运动矢量,数据量比较大;

P帧(帧间预测编码帧)需要参考前面的I帧和/或P帧的不同部分才能进行编码。与I帧相比,P帧通常占用更少的数据位,但其缺点是,由于P帧对前面的P和I参考帧有着复杂的依赖性,因此对传输错误非常敏感。P帧属于前向预测的帧间编码,它只参考前面最靠近它 的I帧或者P帧。

4.NALU包含SPS,PPS,关键帧及非关键帧.三个部分分别为:起始符0x00000001或者0x000001;Start code 如0x67/0x68;profile_idc如0x42 00 28 E9 00.

nal中type部分值为6是SEI,7是SPS,8是PPS

5.关键帧就是I frame,最简单的办法是找0x65或0x25(I frame启始位),或者去找0x67或0x27(序列参数集SPS)和0x68或0x28(图像参数集PPS)后面的完整包。SPS和PPS后面必然跟着I frame。

I帧:帧内编码帧 ,I帧表示关键帧,你可以理解为这一帧画面的完整保留;解码时只需要本帧数据就可以完成(因为包含完整画面)
I帧特点:
1.它是一个全帧压缩编码帧。它将全帧图像信息进行JPEG压缩编码及传输;
2.解码时仅用I帧的数据就可重构完整图像;
3.I帧描述了图像背景和运动主体的详情;
4.I帧不需要参考其他画面而生成;
5.I帧是P帧和B帧的参考帧(其质量直接影响到同组中以后各帧的质量);
6.I帧是帧组GOP的基础帧(第一帧),在一组中只有一个I帧;
7.I帧不需要考虑运动矢量;
8.I帧所占数据的信息量比较大。

P帧:前向预测编码帧。P帧表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。(也就是差别帧,P帧没有完整画面数据,只有与前一帧的画面差别的数据)
P帧的预测与重构:P帧是以I帧为参考帧,在I帧中找出P帧“某点”的预测值和运动矢量,取预测差值和运动矢量一起传送。在接收端根据运动矢量从I帧中找出P帧“某点”的预测值并与差值相加以得到P帧“某点”样值,从而可得到完整的P帧。
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帧记录的是本帧与前后帧的差别(具体比较复杂,有4种情况,但我这样说简单些),换言之,要解码B帧,不仅要取得之前的缓存画面,还要解码之后的画面,通过前后画面的与本帧数据的叠加取得最终的画面。B帧压缩率高,但是解码时CPU会比较累。
B帧的预测与重构
B帧以前面的I或P帧和后面的P帧为参考帧,“找出”B帧“某点”的预测值和两个运动矢量,并取预测差值和运动矢量传送。接收端根据运动矢量在两个参考帧中“找出(算出)”预测值并与差值求和,得到B帧“某点”样值,从而可得到完整的B帧。
B帧特点
1.B帧是由前面的I或P帧和后面的P帧来进行预测的;
2.B帧传送的是它与前面的I或P帧和后面的P帧之间的预测误差及运动矢量;
3.B帧是双向预测编码帧;
4.B帧压缩比最高,因为它只反映丙参考帧间运动主体的变化情况,预测比较准确;
5.B帧不是参考帧,不会造成解码错误的扩散。

注:I、B、P各帧是根据压缩算法的需要,是人为定义的,它们都是实实在在的物理帧。一般来说,I帧的压缩率是7(跟JPG差不多),P帧是20,B帧可以达到50。可见使用B帧能节省大量空间,节省出来的空间可以用来保存多一些I帧,这样在相同码率下,可以提供更好的画质。

提高技能如同提升自信心。

H.264基础知识总结相关推荐

  1. H.264基础知识及视频码流解析

    H.264基础知识及视频码流解析 目录 H.264概述 H264相关概念 H264压缩方式 H264分层结构 H264码流结构 H264的NAL单元 H.264视频码流解析及代码实现 1. H.264 ...

  2. H.264 基础及 RTP 封包详解

    一. h264基础概念 1.NAL.Slice与frame意思及相互关系 1 frame的数据可以分为多个slice. 每个slice中的数据,在帧内预测只用到自己slice的数据, 与其他slice ...

  3. HEVC(H.265) 基础知识

    最近由于工作需求,需要学习HEVC(High Efficiency Video Coding).最初一头雾水,都不了解这是视频压缩标准的一种.此文章,主要是为了笔者初步学习HEVC而写的学习笔记. 本 ...

  4. iOS VideoToolbox硬编H.265(HEVC)H.264(AVC):1 概述

    本文档尝试用Video Toolbox进行H.265(HEVC)硬件编码,视频源为iPhone后置摄像头.去年做完硬解H.264,没做编码,技能上感觉有些缺失.正好刚才发现CMFormatDescri ...

  5. H.265与H.264的区别详解

    1.H.264与H.265的主要差异 H.265仍然采用混合编解码,编解码结构域H.264基本一致, 主要的不同在于: Ø 编码块划分结构:采用CU (CodingUnit).PU(Predictio ...

  6. 4K H.265和H.264

    相信大家都听过H.265和H.264这两种编码,也看过专业术语的解释.包括电视机都会标注支持H.265格式4K视频编码,视频监控系统也会标注支持H.265.但是在没有用过的情况下,很难说真的已经知道两 ...

  7. 无插件视频播放器EasyPlayer如何实现Web端兼容H.264与H.265码流?

    随着互联网.物联网.移动互联网.云服务等技术的不断进步,推动安防行业朝着高清化.智能化.集成化的方向发展.视频技术在安防领域的应用也不再仅仅局限于考虑压缩特性本身,而是逐渐开始向网络适应性.用户交互性 ...

  8. H.264编码基础知识详解

    一.编码基础概念 1.为什么要进行视频编码? 视频是由一帧帧图像组成,就如常见的gif图片,如果打开一张gif图片,可以发现里面是由很多张图片组成.一般视频为了不让观众感觉到卡顿,一秒钟至少需要16帧 ...

  9. 直播一:H.264编码基础知识详解

    一.编码基础概念 1.为什么要进行视频编码? 视频是由一帧帧图像组成,就如常见的gif图片,如果打开一张gif图片,可以发现里面是由很多张图片组成.一般视频为了不让观众感觉到卡顿,一秒钟至少需要16帧 ...

最新文章

  1. OpenFlow: Enabling Innovation in Campus Networks
  2. 进程调度的时机,切换与过程,方式
  3. Vue使用html2canvas将Dom转化为图片
  4. MAX30102+usb转串口+树莓派
  5. 法曲率、主曲率、平均曲率和高斯曲率
  6. google bigquery数据下载
  7. 11个LOGO设计灵感网站推荐,帮你提高LOGO设计工作效率
  8. vue获取facebook用户邮箱、头像并登录
  9. 走进Cocos Creator游戏开发(第一篇)
  10. python跳出循环的方法_Python 跳出嵌套循环的5种方法
  11. MYSQL8.0远程连接出现1045错误(Linux)
  12. OpenGL ES 高级进阶:EGL及GL线程
  13. Java银行卡归属地校验查询
  14. 一行代码搞定Dubbo接口调用
  15. 创作者身份认证申请规则及审核标准
  16. java在spring mvc中的图片接收与发送处理
  17. 【笔记】openwrt - 【一文解决】ipv6设置、DDNS、端口转发
  18. 创建SDE企业级数据库——在 Oracle 中配置 extproc 以访问 ST_Geometry
  19. 东南大学计算机学研招生人数,东南大学2020硕士研究生各专业报录比汇总(实考人数:录取人数)...
  20. 南大通用GBase 8s性能简介

热门文章

  1. python生成word目录_Python 文件与目录操作方法总结
  2. AI趋势下,小布助手的进化论
  3. icare3.0医用his软件部署基本流程
  4. python处理adb截屏_《自拍教程38》Python_adb一键截屏
  5. 【TensorFlow】官方例子mnist_with_summaries.py在windows下运行tensorboard
  6. 知识问答(KBQA)两种主流方法:基于语义解析和基于信息检索的方法介绍
  7. Python生成器与迭代器
  8. java 开发多if else 代码优化
  9. JavaWeb(9) I18N国际化
  10. 苹果笔记本如何安装windows系统