2. 音视频H264

视频软件基本流程

1.什么是H264

H.264是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压缩数字视频编解码器标准

H265又名高效率视讯编码(High Efficiency Video Coding, HEVC)编码格式,支持1080p以上的4K×2K和8K×4K分辨率,将视频压缩率提高至H.264的约2倍。相比H.264,H.265需要更高的计算资源来进行编码和解码。由于H.265的算法更复杂,对处理器性能的要求更高。这意味着在相同的硬件条件下,H.265的编码和解码速度可能较慢。

2.H.264的数据格式是怎样的?

H.264由视频编码层(VCL)和网络适配层(NAL)组成。

◆ VCL:H264编码/压缩的核心,主要负责将视频数据编码/压缩,再切分。视频编码层,包括核心压缩引擎和块、宏块和片的语法级别定义,设计目标是尽可能地独立于网络进行高效的编码,负责有效表示视频数据的内容。

◆ NALU = NALU header + NALU payload,负责将 VCL 产生的比特字符串适配到各种各样的网络和多元环境中,覆盖了所有片级以上的语法级别;一个NALU 单元常由 [NALU Header] + [NALU Payload] 部分组成。

3.VCL是如何管理H264视频数据?

◆ 压缩:预测(帧内预测和帧间预测)-> DCT变化和量化 -> 比特流编码;

◆ 切分数据,主要为了第三步。"切片(slice)"、"宏块(macroblock)"是在VCL中的概念,一方面提高编码效率和降低误码率、另一方面提高网络传输的灵活性。

◆ 包装成『NAL』。

◆ 『VCL』最后会被包装成『NAL』

4.NAL头的数据结构体

|---|---|---|---|---|---|---|---|
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| F | NRI || TYPE |||||

◆ F(forbidden_zero_bit):1 位,初始为0。当网络识别此单元存在比特错误时,可将其设为 1,以便接收方丢掉该单元

◆ NRI(nal_ref_idc):2 位,用来指示该NALU 的重要性等级。值越大,表示当前NALU越重要。具体大于0 时取何值,没有明确规定

◆ Type(nal_unit_type):5 位,指出NALU 的类型,如下所示:

5.H.264码流结构

◆ H.264 = start_code + NALU(start_code:00000001 or 000001)

◆ 每个NAL前有一个起始码 0x00 00 01(或者0x00 00 00 01),解码器检测每个起始码,作为一个NAL的起始标识,当检测到下一个起始码时,当前NAL结束。

◆ 同时H.264规定,当检测到0x000000时,也可以表征当前NAL的结束。那么NAL中数据出现0x000001或0x000000时怎么办?H.264引入了防止竞争机制,如果编码器检测到NAL数据存在0x000001或0x000000时,编码器会在最后个字节前插入一个新的字节0x03,这样:

0x000000->0x00000300

0x000001->0x00000301

0x000002->0x00000302

0x000003->0x00000303

EBSP等同于NAL Body的数据本身,它包含了原始编码数据(RBSP)以及一个特殊的字节0x03,这个字节被称为防止竞争校验字节。它的目的是为了防止NAL Body内部出现与NAL Unit起始码冲突的字节序列
实例分析H246解码:

如下图其实位没问题是00000001,然后27(0010 0111),其中00说明没有错误,10是等级0111是NAL的类型,根据上表查找可以知道是序列参数集。

6.I帧、P帧和B帧

提到H.264,不得不提I帧、P帧、B帧、IDR帧、GOP。

◆ I帧(Intra-coded picture,帧内编码图像帧),表示关键帧,采用类似JPEG压缩的DCT(Discrete Cosine Transform,离散余弦变换)压缩技术,可达1/6压缩比而无明显压缩痕迹;

◆ P帧(Predictive-coded picture,前向预测编码图像帧),表示的是跟之前的一个关键帧或P帧的差别,P帧是参考帧,它可能造成解码错误的扩散;

◆ B帧(Bidirectionally predicted picture,双向预测编码图像帧),本帧与前后帧(I或P帧)的差别,B帧压缩率高,但解码耗费CPU;

◆ IDR帧(Instantaneous Decoding Refresh,即时解码刷新):首个I帧,是立刻刷新,使错误不致传播,IDR导致DPB(DecodedPictureBuffer参考帧列表------这是关键所在)清空;在IDR帧之后的所有帧都不能引用任何IDR帧之前的帧的内容;IDR具有随机访问的能力,播放器可以从一个IDR帧播放。

◆ GOP(Group Of Picture,图像序列):两个I帧之间是一个图像序列,一个GOP包含一个I帧

7.解码时间戳和显示时间戳

当然,H.264中还有两个重要的概念:DTS和PTS

◆ DTS(Decoding Time Stamp,解码时间戳解):读入内存中的比特流在什么时候开始送入解码器中进行解码

◆ PTS(Presentation Time Stamp,显示时间戳):解码后的视频帧什么时候被显示出来

如上这段解码顺序首先是I帧,然后是B,因为B帧是双向所以,发现第三个也是B帧就会缓存到解码内存中,所以解码缓存,然后第3和第4,然后最后才是第2,之后以此类推。

相关推荐
EasyCVR16 分钟前
EHOME视频平台EasyCVR视频融合平台使用OBS进行RTMP推流,WebRTC播放出现抖动、卡顿如何解决?
人工智能·算法·ffmpeg·音视频·webrtc·监控视频接入
冷凝女子2 小时前
【QT】海康视频及openCv抓拍正脸接口
qt·opencv·音视频·海康
安步当歌3 小时前
【WebRTC】视频编码链路中各个类的简单分析——VideoStreamEncoder
音视频·webrtc·视频编解码·video-codec
顾北川_野3 小时前
Android CALL关于电话音频和紧急电话设置和获取
android·音视频
顶呱呱程序3 小时前
2-143 基于matlab-GUI的脉冲响应不变法实现音频滤波功能
算法·matlab·音视频·matlab-gui·音频滤波·脉冲响应不变法
EasyCVR5 小时前
萤石设备视频接入平台EasyCVR多品牌摄像机视频平台海康ehome平台(ISUP)接入EasyCVR不在线如何排查?
运维·服务器·网络·人工智能·ffmpeg·音视频
runing_an_min5 小时前
ffmpeg 视频滤镜:屏蔽边框杂色- fillborders
ffmpeg·音视频·fillborders
我喜欢就喜欢17 小时前
基于qt vs下的视频播放
开发语言·qt·音视频
安步当歌18 小时前
【WebRTC】视频采集模块中各个类的简单分析
音视频·webrtc·视频编解码·video-codec
EasyGBS19 小时前
国标GB28181公网直播EasyGBS国标GB28181软件管理解决方案
大数据·网络·音视频·媒体·视频监控·gb28181