一、为什么要对视频编码

视频是由一帧帧的图像组成,就像gif图片一样。一般视频为了不会让人感觉到卡顿,一秒钟至少需要16帧画面(一般30帧)。加入该视频是一个1280x720的分辨率,那么不经过编码一秒钟传输的大小为1280x720x60~=843M。所以不经过编码的视频根本没法保存和传输。现在市面上主要将编码分为两大类H.264和MPEG。后面一种主要用于DVD,机顶盒等设备。h264编码是一种主流的编码格式。另外H265也属于其中的一种,比如我们电影院播放的电影,一些高清的电视采用的就是这种编码技术。

二、H264编码规则

  • 在相邻的几幅画面中,一般有差别的像素是10%以内的点,亮度差值变化不超过20%,而色度差值的变化只有不到1%,所以对于一段变化不大的画面,我们可以先编码成一个完整的图片帧A
  • 随后的B帧就不编码全部图像,只写入A帧的差别,这样B帧的大小只有完整帧大小的10%或者更小!B帧之后的C帧如果变化不大,我们可以继续以参考B帧的方式进行编码,依次循环下去。
  • 这段图像我们称之为一个序列:序列就是有相同特点的一段数据。当某个图像与之前的图像变化很大,无法根据前面的帧来生成,我们就结束上一段序列,开启下一段序列,也就是对这个图像生成完整的帧A1,随后的帧将参考A1帧,只写入与A1差别的内容。这个序列就是Gop序列,我们也可以把它当作一个场景,比如场景A和场景B,场景A的背景是红色,场景B的背景是绿色,那么A和B就是两个序列。每个序列是从I帧开始的,并且是唯一的,后面是B帧和P帧。两个I帧之间就是一个序列

三、H264编码

I帧、P帧、B帧是如何生成的呢?前面说过,当两个场景差异很大的时候,就会重新开始一个序列,那么这个序列就是从I帧开始的,也称关键帧。那么与I帧相似度极高,到达95%以上,则被编码成B帧;相似度达到70%编码为P帧。I、P、B帧的如何编码不需要我们自己实现,x264工具就已经帮我们完成了。

前面已经说过编码的目的就是为了方便传输(指文件传输,网络流传输等)。但是我们并不能把一帧帧传过去,一帧的内容几十k也是太大了,还需要细分才能更好的传输,所以我们需要更小的传输单元,保证更高的压缩性、容错性以及实时观看性。那么就引入了NALU单元

四、NALU单元

上图可以看到,一帧数据(一张图片)是由很多个NALU单元组成,一个NALU单元分为两部分:NAL头和RBSP

1、NAL头:标识NAL单元中的RBSP数据类型,其中,nal_unit_type为1, 2, 3, 4, 5的NAL单元称为VCL的NAL单元,其他类型的NAL单元为非VCL的NAL单元

  • 0:未规定
  • 1:非IDR图像中不采用数据划分的片段
  • 2:非IDR图像中A类数据划分片段
  • 3:非IDR图像中B类数据划分片段
  • 4:非IDR图像中C类数据划分片段
  • 5:IDR图像的片段
  • 6:补充增强信息(SEI)
  • 7:序列参数集(SPS)
  • 8:图像参数集(PPS)
  • 9:分割符
  • 10:序列结束符
  • 11:流结束符
  • 12:填充数据
  • 13:序列参数集扩展
  • 14:带前缀的NAL单元
  • 15:子序列参数集
  • 16 – 18:保留
  • 19:不采用数据划分的辅助编码图像片段
  • 20:编码片段扩展
  • 21 – 23:保留
  • 24 – 31:未规定

2、RBSP:又被成为切片,每个切片是由片头和片数据组成,片数据是由若干个宏块组成。包括序列参数集 SPS  和 图像参数集 PPS

3、SPS与PPS

概念:包含了初始化H.264编码所需要的信息参数。包括编码所用的profile,level,图片的宽和高,deblock滤波器等

SPS:序列参数集,如标识符 seq_parameter_set_id、帧数及 POC 的约束、参考帧数目、解码图像尺寸和帧场编码模式选择标识 等等。

PPS:图像参数集,其参数如标识符 pic_parameter_set_id、可选的 seq_parameter_set_id、熵编码模式选择标识、片组数目、初始量化参数和去方块滤波系数调整标识等等。

在H.264编码中都是以"0x00 0x00 0x01"或者"0x00 0x00 0x00 0x01"为开始码的,找到开始码后,使用开始码后的第一个字节的低5位判断是否为7(sps)或8(pps),即data[4]&0x1f==7或data[4]&0x1f==8。然后对获取的nal去掉开始码之后进行base64编码,得到的信息就可以用于sdp,sps,pps,需要用逗号隔开。

H264视频编码原理相关推荐

  1. 深入讲解音视频编码原理,H264码流详解——手写H264编码器

    音视频高手课08-H264 I帧 P帧 B帧及手写H264编码器 1 三种帧的说明 1.I 帧:帧内编码帧,帧表示关键帧,你可以理解为这一帧画面的完整保留:解码时只需要本帧数据就可以完成(因为包含完整 ...

  2. 解析视频编码原理——从孙艺珍的电影说起(一)

    更多博文,请看音视频系统学习的浪漫马车之总目录 视频理论基础: 视频基础知识扫盲 音视频开发基础知识之YUV颜色编码 解析视频编码原理--从孙艺珍的电影说起(一) 解析视频编码原理--从孙艺珍的电影说 ...

  3. H264视频编码成MP4文件

    http://blog.csdn.net/firehood_/article/details/8813587 版权声明:本文为博主原创文章,未经博主允许不得转载. 最近需要将H264视频编码成MP4格 ...

  4. mp4v2再学习 -- H264视频编码成MP4文件

    一.H264视频编码成MP4文件 参看:H264视频编码成MP4文件 参看:mp4v2在VS2010下的编译与在项目中的使用 最近做项目需要将H264文件封装为mp4文件,从网上找到了MP4V2库,下 ...

  5. H.266/VVC视频编码原理探索

    在2020年7月,H.266/VVC的标准规范正式面世.据统计,VVC的编码压缩率比HEVC提升一倍,支持RPR参考帧重采样.SCC屏幕内容编码等新技术.这意味着在5G时代,VVC视频编码让4K.8K ...

  6. 毕设系列之Libx264实时视频流(YUV 420P转H264视频编码篇)

    #PS:要转载请注明出处,本人版权所有 #PS:这个只是 < 我自己 >理解,如果和你的 #原则相冲突,请谅解,勿喷 开发环境:Ubuntu 16.04 LTS 本文的技术实现部分参考雷博 ...

  7. 音视频 — 视频编码原理

    目录 视频编码主要分为 图像的冗余 熵编码 帧内预测 帧间预测 DCT变换和量化 编码器比较 清晰度和耗时对比 一部电影1080P,帧率25fps,时长2小时,文件大小 1920x1080x1.5x2 ...

  8. FFmpeg入门详解之20:视频编码原理简介

    视频为何需要压缩? 原因:未经压缩的数字视频的数据量巨大 ● 存储困难 ○ 一G只能存储几秒钟的未压缩数字视频. ● 传输困难 ○ 1兆的带宽传输一秒的数字电视视频需要大约4分钟. 主要压缩了什么东西 ...

  9. FFmpeg入门详解之21:视频编码原理的实现

    1.视频编码基础知识 1.1视频和图像和关系 好了,刚才说了图像,现在,我们开始说视频. 所谓视频,大家从小就看动画,都知道视频是怎么来的吧? 没错,大量的图片连续起来,就是视频. 衡量视频,又是用的 ...

  10. 从零开始理解DM368的H264视频编码过程(上)

    目录 〇.前言 一.DVSDK的结构和编码程序依赖 1.DVSDK目录结构 2.程序依赖 二.DM368的视频处理子系统 --本篇涉及的资料下载-- 〇.前言 本系列博客性质为个人学习笔记.记录了我如 ...

最新文章

  1. 2022-2028年中国再生金属行业投资分析及前景预测报告
  2. IT人保持健康的必备法宝
  3. python自动测试n_接口自动化:Jenkins 自动构建python+nose测试
  4. 阶段3 3.SpringMVC·_03.SpringMVC常用注解_5 RequestHeader注解
  5. 作为前端程序员,你不能不知道的这个小技巧
  6. python:base64与图片的互转
  7. JAVA JSP javaweb餐厅点餐系统源码(点餐系统)点餐系统网上订餐系统在线订餐系统
  8. e的ax次方怎么求导
  9. html5 自动扣图,html5 canvas+js实现ps钢笔抠图
  10. 分享一款好用的Jetbrain插件-Jenkins Control
  11. 1、AUTOSAR简介
  12. css grid布局中的minmax()函数的使用
  13. dex2jar源码解析----解析dex文件一
  14. OpenCV二值图像连通域分析
  15. 一次哔哩哔哩面试经历,论程序员成长的正确姿势
  16. 虚拟服务器声卡,怎么在Win7系统Hyper-v虚拟机中接真实机声卡
  17. 管理费用负数报不了怎么办_管理费用发生额是负数怎么办
  18. Win10任务栏透明
  19. 计算机网络:16---因特网标准(IETF、RFC)
  20. frame 和bounds 的区别

热门文章

  1. 全国所有县的12.5m分辨率DEM数据制作与分享
  2. python3菜鸟教程100例-Python3
  3. [目标检测系列]ATSS: Bridging the Gap Between Anchor-based and Anchor-free Detection via ATSS(CVPR2020)
  4. 手把手教你实现自己的预设滤镜
  5. KaTeX|LaTeX数学公式编辑手册
  6. SQL数据库面试题以及答案(50题)
  7. 纯前端播放文件流视频并预览并截取视频第一帧
  8. Unity基础学习之Unity引擎学习(一)
  9. 3U VPX 高性能视频图像处理板( 国产ARM 信号处理板 FPGA + HI3559A )
  10. 计算机代数与数论pdf,计算机代数与数论.pdf