P2 H264码流结构分析——Annexb与MP4格式的区别 (中)

前言

                             

从本章开始我们将要学习嵌入式音视频的学习了 ,使用的瑞芯微的开发板

🎬 个人主页:@ChenPi

🐻推荐专栏1: 《C++_@ChenPi的博客-CSDN博客》✨✨✨ 

🔥 推荐专栏2: 《Linux C应用编程(概念类)_@ChenPi的博客-CSDN博客》✨✨✨

🛸推荐专栏3:《嵌入式音视频_@ChenPi的博客-CSDN博客》
🌺本篇简介  :这章记录编解码的基础理论知识——H264的码流结构

这章我们以一下这个图来讲解H264的码流结构

这个图是我从网上找的 

我们按照这个层级关系来学

 

01 Annexb格式

Annexb 格式使用起始码来表示一个编码数据的开始。
起始码他本身不是图像编码的内容,只是用来分隔用的,
而且他是大多数编码器默认输出 的码流格式,它的基本数据单位为NAL 单元,也即 NALU
为了从字节流中提取出NALU ,协议规定,在每个 NALU 的前面加上起始码 。起始码有两
种,一种是 4 字节的 “00 00 00 01” ,一种是 3 字节的 “00 00 01”
这里需要注意一下,由于图像编码出来的数据中也有可能出现 “00 00 00 01” “00 00 01” 的数据。
那这种情况怎么办呢?为了防止出现这种情况
H264 会将图像编码数据中的下面的几种字节串做如下处理:
1 “00 00 00” 修改为 “00 00 03 00”
2 “00 00 01” 修改为 “00 00 03 01”
3 “00 00 02” 修改为 “00 00 03 02”
4 “00 00 03” 修改为 “00 00 03 03”

H264 比特流 = Start_Code_Prefix + NALU + Start_Code_Prefix + NALU + …
这里也说一下为什么需要起始码?
主要是为了将相邻两个 NALU 划分开,让他们有一个界线 , 方便解码,比如将 h264 的数据存储在一个文件当中,解码器无法从数据流中分别每个 NALU 的起
始位置。 

02 RTP格式(也叫MP4格式)

MP4 格式没有起始码,而是在图像编码数据的开始使用了 4 个字节作为长度标识,用来表示编码数据的长度,这样我们每次读取 4 个字节,计 算出编码数据长度,然后取出编码数据,再继续读取 4 个字节得到长度,一直继续下去就可以取出所有的编码数据了。
h264 的字节流格式,它是没有经过传输协议封装,所以也可以称他为裸流数据!
下一章我们重点讲解这个码流格式里面的 NALU 单元,也就是我们在本地拿到一个以 .264 格式的视频文件,我们首先去提取里面的 NALU ,这个才是重 点!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何使用Java的GeoTools地理库计算WGS84坐标下的两个经纬度之间得距离

介绍 本章讲解如何使用Java的GeoTools地理库计算基于WGS84坐标的两点之间的距离。适用于后台服务的距离计算。 GeoTools介绍 GeoTools是开源的Java地理信息计算库。GeoServer地图引擎就是基于GeoTools库构建得地图服务,可以说非常强大。 官网地址:https://docs.geotools.o…

python/C 生成beta分布的随机数

python/C 生成beta分布的随机数 文章目录 python/C 生成beta分布的随机数前言一、beta分布理论知识二、python 生成服从beta分布的随机数三、C语言生成服从beta分布的随机数 前言 想把一个算法用C语言实现,其中涉及到了beta分布取随机数,记录一下结果 一…

【Java】网络编程-TCP回显服务器代码编写

前面我们讲了基于UDP的网络编程 UDP回显服务器 UDP字典服务器 下面我们来讲基于TCP的回显服务编写 1、服务器 import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.io.PrintWriter; import java.net.ServerSocket; impo…

25、新加坡南洋理工、新加坡国立大学提出FBCNet:完美融合FBCSP的CNN,EEG解码SOTA水准![抱歉老师,我太想进步了!]

前言: 阴阳差错,因工作需要,需要查阅有关如何将FBCSP融入CNN中的文献,查阅全网,发现只此一篇文章,心中大喜,心想作者哪家单位,读之,原来是自己大导(新加坡工…

冬天天冷早安问候语关心话,愿我的每句话都能带给你温馨

1、送你一声问候,为你驱走冬日严寒,送你一份关怀,为你增添丝丝温暖,送你一句祝福,为你驱走所有不快,送你一份关爱,为你增添幸福无限,天虽寒了,我的关心犹在,愿…

Centos安装Docker及使用

文章目录 配置要求Centos安装Docker卸载docker(可选)安装docker首先需要大家虚拟机联网,安装yum工具然后更新本地镜像源:然后输入安装docker命令:查看docker的版本 启动docker关闭防火墙接着通过命令启动docker 配置镜…

vscode debug c++代码

需要提前写好CMakeLists.txt 在tasks.json中写好编译的步骤,即tasks,如cmake … 和make -j 在lauch.json中配置可执行文件的路径和需要执行tasks中的哪一个任务 具体步骤: 1.写好c代码和CMakeLists.txt 2.配置tasks.json 终端–>配置任务…

竞赛保研 基于CNN实现谣言检测 - python 深度学习 机器学习

文章目录 1 前言1.1 背景 2 数据集3 实现过程4 CNN网络实现5 模型训练部分6 模型评估7 预测结果8 最后 1 前言 🔥 优质竞赛项目系列,今天要分享的是 基于CNN实现谣言检测 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐&am…

Jmeter测试时遇到的各种乱码问题及解决

在Jmeter中显示乱码 遇到的问题:csv文件中有的用户名是中文的,接口使用该用户名入参时,查看结果树中看到,中文名显示为一堆乱码。 解决的方法: 应该是文件编码与jmeter编码不一致导致的。 1)新建一个tx…

使用Python从图像中提取表格

有什么作用? 与深度学习解决方案相比,这个轻量级的包不需要训练和最小化参数化。它提供了以下功能: 识别图像和PDF文件中的表格,包括在表格单元级别的边界框。 通过支持OCR服务/工具(Tesseract、PaddleOCR、AWS Textract、Google Vision和Azure OCR目前支持)来提取表格内…

Grafana安装zabbix插件

文章目录 一、在线安装zabbix插件二、离线安装1.下载安装2.grafana配置zabbix数据源 一、在线安装zabbix插件 如果grafana服务器可以联网即可在线安装。 安装方法官网上有:官网链接联网安装比较慢。 二、离线安装 1.下载安装 官网下载链接 [rootnode1 src]# mo…

抖店怎么运营?走通流程是关键!

我是电商珠珠 很多新手在入驻抖店的时候,都不知道前期怎么去运营。 运营的技巧很多,牵扯到很多细节,跑通流程是关键。 所以,今天就来给大家讲讲抖店的几个基本流程,只有将流程跑通了才能去更快的抠细节上的东西。 …

算法题系列6·删除有序数组中的重复项

目录 题目描述 思路分析 实现 题目描述 给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。 考虑 …

解决:AD原理图网络无法更新同步到PCB

问题:表面上看起来引脚号都是一一对应的,但是Update过去就是无法同步。 解决: 检查并修改 元件管脚列 与 Name列 是否一一对应: 检查封装管脚模型匹配:

基于ssm高校实验室信息化综合管理平台建设系统论文

摘 要 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本高校实验室信息化综合管理就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的…

【快速解决】python数据可视化时候无法显示中文字符的问题/图表中无法显示中文字符

目录 问题展示 解决方法 运行效果展示 问题展示 解决方法 加入以下代码即可 import matplotlib.pyplot as pltplt.rcParams[font.sans-serif] [SimHei] plt.rcParams[axes.unicode_minus] False运行效果展示 成功运行出来 🌌点击下方个人名片,交流会…

K8s攻击案例:Privileged特权容器导致节点沦陷

01、概述 特权容器(Privileged Container)是一种比较特殊的容器,在K8s中运行特权容器,需要将 Privileged 设为 true ,容器可以执行几乎所有可以直接在主机上执行的操作。 基于此,利用容器的特权配置可以获取…

flutter开发实战-第一帧布局完成回调实现

flutter开发实战-第一帧布局完成回调实现 在开发中,我们有时候需要在第一帧布局完成后调用一些相关的方法。这里记录一下是实现过程。 Flutter中有多种不同的Binding,每种Binding都负责不同的功能。下面是Flutter中常见的Binding: 这里简单…

【权威认证】飞凌嵌入式FET113i-S核心板国产化率达100%

经中国赛宝实验室的严格认证,飞凌嵌入式FET113i-S核心板的电子元器件国产化率达100%——这款超高性价比的全国产核心板为新基建领域的国产化替代升级注入了新动力。 关于【中国赛宝实验室】 中国电子产品可靠性与环境试验研究所(工业和信息化部电子第五研…

STM32 AI 模型测试

PC仿真软件测试 我在STM32单片机上跑神经网络算法—CUBE-AI_stm32cube.ai-CSDN博客 仿真软件测试结果和真实情况差距过大 云平台测试 Home - STM32Cube.AI Developer Cloud 上传模型文件 点击Start 选择优化方式 可以跳过量化步骤,到Benchmark 选择合适的型号&a…