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头的数据结构体

01234567
FNRITYPE

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/26745.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1004.最大连续1的个数

给定一个二进制数组 nums 和一个整数 k,如果可以翻转最多 k 个 0 ,则返回 数组中连续 1 的最大个数 。 示例 1: 输入:nums [1,1,1,0,0,0,1,1,1,1,0], K 2 输出:6 解释:[1,1,1,0,0,1,1,1,1,1,1] 粗体数字…

算法题day43(补5.29日卡:动态规划03)

一、01背包问题基础: 有n件物品和一个最多能背重量为w的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解哪些物品装入背包里物品价值总和最大。 1.用dp的方法做: ①dp[i][j]的含义:从下标为[…

席卷的B站《植物大战僵尸杂交版》V2.0.88整合包,PC和手机可用,含通关存档和视频教程!

今天给大家安利一款席卷B站,火爆全网的游戏——《植物大战僵尸杂交版》2.0.88整合包。 这个是网络上现存植物大战僵尸杂交版的最全整合,包含了修改工具,超强通关存档和高清工具。工具包有安装视频教程,支持手机版和pc多端使用&am…

家用洗地机前十名排行榜:2024十大热销款式好用不踩雷

洗地机强大的清洁力和高效的清洁效率,迅速代替了吸尘器、电动拖把、蒸汽拖把的位置,成为家庭地面清洁的新宠,各大厂商也纷纷上新自家新品。但是这个也造成了人们在挑选机型的时候无从下手,甚至很多新手购机,几乎对洗地…

Typora 破解、激活!亲测有效!2024 最新激活方法

Typora 破解、激活!亲测有效!2024 最新激活方法 Typora是一款简单易用的Markdown编辑器。 Markdown是一种可以使用普通文本编辑器编写的标记语言,通过简单的标记语法,它可以使普通文本内容具有一定的格式,其目标是实现…

【Intel CVPR 2024】通过图像扩散模型生成高质量360度场景,只需要一个语言模型

在当前人工智能取得突破性进展的时代,从单一输入图像生成全景场景仍是一项关键挑战。大多数现有方法都使用基于扩散的迭代或同步多视角内绘。然而,由于缺乏全局场景布局先验,导致输出结果存在重复对象(如卧室中的多张床&#xff0…

[AIGC] 深入理解Java Map接口

深入理解Java Map接口 Java Map提供了一个存储键值对的数据结构,键是唯一的,但值可以重复。在Java中,Map接口是java.util包中的一部分,它定义了操作映射的方法。本篇文章将介绍Java Map接口中的常用API。 Map接口常用方法 以下…

Web前端限制下载速度:深入探索与实现策略

Web前端限制下载速度:深入探索与实现策略 在Web前端开发中,限制下载速度的需求可能源于多种场景,如节省带宽、控制资源消耗或模拟网络延迟等。然而,这一需求在技术上却带来了不小的挑战。本文将从四个方面、五个方面、六个方面和…

Armbian OS(基于ubuntu24) 源码编译mysql 5.7

最近弄了个S905X3的盒子刷完Armbian OS (基于ubuntu24),开始折腾Arm64之旅。第一站就遇到了MySQL的问题,由于MySQL没有提供Arm64版本,又不想塞Docker镜像,因此选择源码来编译MySQL5.7。下面记录详细过程和遇…

Golang的GC

目录 介绍GC 概要 什么是根对象 三色标记法 什么情况下三色标记法会失效 屏障机制 “强-弱” 三色不变式 插入屏障 (强三色) 删除屏障(弱三色) Go 的混合写屏障机制 混合写屏障规则 介绍GC 概要 作用范围:只回收堆内存,不回收栈内存&#xf…

EtherCAT主站SOEM -- 31 -- STM32F767-SOEM从站IO模块采集DI及输出DO

EtherCAT主站SOEM -- 31 -- STM32F767-SOEM从站IO模块采集DI及输出DO 0 QT-SOEM及STM32F767-SOEM视频欣赏及源代码链接:0.1 QT-SOEM博客、视频欣赏及源代码链接0.2 STM32F767-SOEM 博客、视频欣赏及源代码链接1 程序文件修改替换1.1 allvalue.h1.2 allvalue.c1.3 motrorcontro…

举个栗子!Tableau 技巧(276):学做径向柱状图(Radial Column Chart)

关于 径向柱状图(Radial Column Chart),俗称环形柱状图。它的用法跟柱形图基本一致,不同之处在于它的值刻度是环形的,数值从内到外依次增加,柱子越长代表数值越大。 数据粉可能会问:径向柱形图…

大学英语综合教程3翻译1-5单元

Unit1 十年之前,南希做了许许多多美国人梦寐以求的事.她辞去了经理职位,在临近地区开了一家家用器具商店.像南希那样的人做出这种决定主要是想改善生活质量. A decade ago, Nancy did what so many Americans dream about. She quit an executive position and opened a hous…

独具韵味的移动端 UI 风格

独具韵味的移动端 UI 风格

10.GLM

智谱AI GLM 大模型家族 最强基座模型 GLM-130B GLM (General Language Model Pretraining with Autoregressive Blank Infilling) 基于自回归空白填充的通用语言模型(GLM)。GLM通过增加二维位置编码并允许以任意顺序预测跨度来改进空白填充预训练&…

SQL 截取函数

目录 1、substring 2、left 3、right 4、substring_index 1、substring 用途:字段截取从指定开始的字符开始,截取要的数;指定开始的字符数字可以用负的,指定开始的字符从后往前(向左)数,截取要的数不能为负。 语…

go语言 | 快速生成数据库表的 model 和 queryset

就是生成 model 目录的 xxx.go 和 xxx_gen.go 文件 使用的工具: 快速生成 model:gentool:https://github.com/go-gorm/gen/tree/master/tools/gentool 根据 model 生成 queryset:go-queryset:https://github.com/jirfa…

第三十一篇-OneAPI+Ollama实现配置

本文介绍使用oneapiollama实现openai接口实现 环境要求 Docker version 26.1.3 具体安装不会,百度安装oneapi mkdir /home/oneapi/data docker run --name one-api -d --restart always -p 3000:3000 -e TZAsia/Shanghai -v /home/oneapi/data:/data justsong/on…

2024.6.13 作业 xyt

今日作业: 自由发挥登录窗口的应用场景,实现一个登录窗口界面 要求:每行代码都有注释 #include "my06zuoye.h"My06zuoye::My06zuoye(QWidget *parent): QMainWindow(parent) {//设置大小(窗口&#xf…

java1.8运行arthas-boot.jar运行报错解决

报错内容 输入java -jar arthas-boot.jar,后报错。 [INFO] JAVA_HOME: D:\developing\jdk\jre1.8 [INFO] arthas-boot version: 3.7.2 [INFO] Can not find java process. Try to run jps command lists the instrumented Java HotSpot VMs on the target system.…