H.264编码

简介: H.264编码

1.为什么要对视频进行编码

      视频是连续的图像序列,由连续的帧构成,一帧即为一幅图像,由于人眼的视觉暂留效应,当帧序列以一定的速率播放时,我们看到的就是动作连续的视频,这么多连续的图像数据如果不经过编码则数据量太大了。

2.H.264编码框架

H.264码流文件分为两层

(1)VCL(Video Coding Layer,视频编码层): 负责高效的视频内容表示,VCL数据即编码处理的输出,它表示被压缩编码后的视频数据序列。

(2)NAL (Network Abstraction layer,网络提取层): 负责以网络所要求的恰当的方式对数据进行打包和传送,是传输层。I不管在本地播放还是网络播放,都要通过这一层来传输。

VCL就是被压缩编码后的原始数据

将VCL数据封装到NAL单元中,才可以用于传输和存储

3.H.264码流分析

一般H.264编码器的默认输出为:起始码+NAL单元(NALU)。起始码为:0x00000001或者0x000001

(1)NAL单元

H.264的编码视频序列包括一系列的NAL单元。

一个NAL单元=一个原始字节序列负载(RBSP)+一个对应于视频编码的NAL头文件

H.264码流NAL单元序列如图

(2)NAL Header

通过解析NAL头部,可以确定每个NAL单元的帧类型IPB帧。

l帧:帧内编码帧,关键帧,l帧可以看作一个图像经过压缩之后的产物,可以单独解码出一个完整的图像。

P:前向预测编码,记录了本帧跟之前的一个关键帧(或P)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面。

B帧:双向预测编码帧,记录了本帧与前后帧的差别,解码需要参考前面一个I帧或者P帧,同时也需要后面的P帧才能解码一张完整的图像。

NAL头的组成:

NAL头由一个字节组成,如下所示:

语法:禁止位(1位)、重要性指示位(2位)、NALU类型(5位)

|0|1|2|3|4|5|6|7|

|F|NRI| Type|

NAl头信息的每一位说明如表所示

0 1~2 3~7
简称 F NRI TYPE
全称 forbidden_zero_bit nal_ref_idc nal_unit_type
中文 禁止位 重要性指示位 NALU类型
作用 当网络发现NAL单元有比特错误时,可设置该比特为1,以便接收方丢掉该单元 标志该NAL单元用于重建时的重要性,值越大,越重要,取值为00~11 1~23表示单个NAL包,24~31需要分包或者组合发送。

nal_unit_type取值的含义如下:

   

(3)原始字节序列负载(RBSP)

每个NAL单元包含一个RBSP。典型的RBSP单元序列如图

每个单元都独立的NAL单元传送。NAL单元的信息头(1字节)定义了RBSP单元的类型,NAL单元的其余部分为RBSP数据。

RBSP各部分的解释:

RBSP 描述
参数集PS 序列的全局参数
增强信息SEI 视频序列解码的增强信息
图像定界符 视频图像的边界
编码 片(Slice)的头信息和数据
数据分割 DP片层的数据,用于错误恢复解码
序列结束符 表明下一图像为IDR图像
流结束符 表明该流中已没有图像
填充数据 元数据,用于填充字节

片(Slice):

一帧图片经过 H.264 编码器之后,就被编码为一个或多个片 (slice),每片包含整数个宏块(至少一个宏块,最多包含整个图像宏块),NAL单元就是装载着这些片 (slice)的载体。

片的语法结构:片头规定了片的类型,属于哪个图像、有关的参考图像等;片的数据包含了一系列宏块和不编码数据。

4.H.264编码原理

      H.264编码的原理是通过利用帧内和帧间的相关性、运动估计、变换、量化和熵编码等技术来减小视频数据的体积,从而实现高效的视频压缩。解码器在接收到H.264编码的视频流后,通过反向过程将其还原为可视的视频序列,以实现视频的播放和显示。

目录
相关文章
|
Linux 数据安全/隐私保护 Windows
音视频开发:大华摄像头配置RTSP与RTMP地址访问视频画面
音视频开发:大华摄像头配置RTSP与RTMP地址访问视频画面
4567 0
音视频开发:大华摄像头配置RTSP与RTMP地址访问视频画面
|
机器学习/深度学习 存储 人工智能
AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出
【9月更文挑战第1天】AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出
AI(文生语音)-TTS 技术线路探索学习:从拼接式参数化方法到Tacotron端到端输出
|
网络协议 网络安全 流计算
【流媒体】RTMP、RTSP、HLS、HTTP协议的介绍与对比
【流媒体】RTMP、RTSP、HLS、HTTP协议的介绍与对比
1130 0
|
机器学习/深度学习 人工智能 数据挖掘
通义语音AI技术问题之TTS的生成效果和流式推理高效性如何解决
通义语音AI技术问题之TTS的生成效果和流式推理高效性如何解决
332 5
|
JavaScript Java 测试技术
基于SpringBoot+Vue+uniapp的高校教务管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
基于SpringBoot+Vue+uniapp的高校教务管理系统的详细设计和实现(源码+lw+部署文档+讲解等)
217 2
|
算法 安全 机器人
最新版opencv4.9安装介绍,基本图像处理详解
最新版opencv4.9安装介绍,基本图像处理详解
791 0
|
SQL 存储 关系型数据库
精通MySQL:从基础到高级运维实战
第一章:MySQL入门与基础 1.1 MySQL概述 简要介绍MySQL的历史、发展及其在数据库领域的地位
|
编解码 算法
白话H.265/HEVC和H.264/AVC编码结构
写在前面 在信息化时代,视频技术和应用的发展,特别是高清(HD)、超高清(UHD)、多视点(MultiView)视频、VR/AR技术的兴起,海量的视频信息已如潮涌般深入到我们工作和生活的方方面面。随着5G通信技术逐渐铺开落地,移动端设备的传输数据量会进一步增加。
3159 0
|
传感器 编解码 数据可视化
costmap_common_params.yaml参数解析和修改要点
costmap_common_params.yaml参数解析和修改要点
1831 1
|
NoSQL
gdb问题解决办法:no debugging symbols found
gdb问题解决办法:no debugging symbols found
1508 0