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,之后以此类推。

相关推荐
悟乙己7 小时前
Github | MoneyPrinterTurbo:自动化视频内容生成系统
自动化·github·音视频
wan5555cn7 小时前
多张图片生成视频模型技术深度解析
人工智能·笔记·深度学习·算法·音视频
AI360labs_atyun14 小时前
2025世界智博会,揭幕AI触手可及的科幻生活
人工智能·ai·音视频·生活
骄傲的心别枯萎14 小时前
RV1126 NO.16:通过多线程同时获取H264和H265码流
linux·c++·音视频·rv1126
纳祥科技17 小时前
分享:一种为蓝牙、WIFI、U段音频发射设备提供ARC回传数字音频桥接功能的方案
网络·单片机·音视频
ai产品老杨1 天前
打通各大芯片厂商相互间的壁垒,省去繁琐重复的适配流程的智慧工业开源了
人工智能·开源·音视频·能源
非凡ghost2 天前
FxSound:提升音频体验,让音乐更动听
前端·学习·音视频·生活·软件需求
Ai工具分享2 天前
视频画质差怎么办?AI优化视频清晰度技术原理与实战应用
人工智能·音视频
萌虎不虎2 天前
【鸿蒙(openHarmony)自定义音频播放器的开发使用说明】
华为·音视频·harmonyos