音视频入门基础:RTP专题(12)——RTP中的NAL Unit Type简介
一、引言
RTP封装H.264时,RTP对NALU Header的nal_unit_type附加了扩展含义。
由《音视频入门基础:H.264专题(4)——NALU Header:forbidden_zero_bit、nal_ref_idc、nal_unit_type简介》可以知道,nal_unit_type表示NALU的类型,在H.264官方文档《T-REC-H.264-202108-I!!PDF-E.pdf》第65页定义为:
二、NAL Unit Type
在RTP封包中,nal_unit_type被附加了扩展含义。根据《RFC 6184》第13页:
可以看到值为1 - 23的nal_unit_type为原H.264中规定的类型,24 - 31为RTP扩展的类型。扩展的类型包括STAP-A、STAP-B、MTAP16、MTAP24、FU-A、FU-B。
三、Decoding Order Number (DON)
根据《RFC 6184》第17页,在interleaved packetization mode(交错分组模式)中,允许NAL单元的传输顺序与NAL单元的解码顺序不同。Decoding Order Number(解码顺序号 ,DON)是有效载荷结构或派生变量中的一个字段,表示NAL单元的解码顺序。传输和解码顺序的耦合由可选的sprop-interleaving-depth媒体类型参数控制,具体如下。当可选的sprop-interleaving-depth媒体类型参数的值等于0(显式或默认值)时,NAL单元的传输顺序必须与 NAL 单元的解码顺序一致。当可选的sprop-interleaving-depth媒体类型参数的值大于0时,NAL单元的传输顺序必须与NAL单元的解码顺序一致。
MTAP16和MTAP24中NAL单元的顺序不需要是 NAL单元解码顺序,并且在两个连续数据包中通过去包STAP-B、MTAP和FU生成的NAL单元的顺序不需要是 NAL单元解码顺序:
四、STAP
STAP是Single-time aggregation packet(单时聚合数据包)的意思。根据《RFC 6184》第22页,当 NAL单元聚合在一起且共享相同的NALU时间时,应使用单时聚合数据包。
(一)STAP-A
STAP-A(STAP type A)的有效载荷不包括DON,至少由一个single-time aggregation units(单时聚合单元)组成。如下图所示:
single-time aggregation units(单时聚合单元)由 16 位无符号大小信息(按网络字节顺序排列)组成,以字节为单位表示后面NAL单元的大小(不包括这两个八位位组,但包括 NAL单元的NAL 单元类型八位位组),后面是NAL单元本身,包括其 NAL 单元类型字节。单时聚合单元在 RTP 有效载荷内按字节对齐,但不一定按 32 位字边界对齐。下图显示了单时聚合单元的结构:
下图展示了一个包含 STAP-A 的 RTP 数据包示例。STAP 包含两个单时聚合单元,在图中分别标为1和2:
(二)STAP-B
STAP-B的有效载荷包括一个16位无符号解码顺序号 (DON)(按网络字节顺序排列)和至少一个single-time aggregation units(单时聚合单元):
DON 字段按传输顺序指定 STAP-B 中第一个 NAL 单元的DON值。对于 STAP-B 中按出现顺序连续出现的每个 NAL 单元,DON 值 =(STAP-B中前一个NAL单元的DON 值 + 1)% 65536,其中“%”表示模乘运算。
下图展示了一个包含 STAP-B 的 RTP 数据包示例。STAP 包含两个单时聚合单元,在图中分别标为 1 和 2:
五、MTAP
MTAP是Multi-Time Aggregation Packet(多时聚合包)的意思。MTAP 的NA 单元有效载荷包括一个 16 位无符号解码顺序号基 (DONB)(按网络字节顺序排列)和一个或多个多时间聚合单元,如下图所示。DONB必须包含MTAP NAL单元解码顺序中第一个NAL单元的DON值。说明:NAL 单元解码顺序中的第一个 NAL 单元不一定是 MTAP 中 NAL 单元封装顺序中的第一个 NAL 单元:
《RFC 6184》定义了两种不同的多时间聚合单元。它们都由以下 NAL 单元的 16 位无符号大小信息(按网络字节顺序)、8 位无符号解码顺序号差值(DOND)和该 NAL 单元的 n 位时间戳偏移(TS 偏移)(按网络字节顺序)组成,其中 n 可以是 16 位或 24 位。不同 MTAP 类型(MTAP16 和 MTAP24)之间的选择取决于应用:时间戳偏移越大,MTAP 的灵活性越高,但开销也越大。
MTAP16的多时间聚合单元结构如下图所示:
MTAP24的多时间聚合单元结构如下图所示:
数据包内聚合单元的起始或终止位置不要求在 32 位字边界上。多时间聚合单元中包含的 NAL 单元的 DON 等于 (DONB + DOND) % 65536,其中 % 表示取模运算。本备忘录未说明 MTAP 中的 NAL 单元如何排序,但在大多数情况下,应使用 NAL 单元解码顺序。
时间戳偏移字段必须设置为等于以下公式的值:如果 NALU 时间大于或等于数据包的 RTP 时间戳,则时间戳偏移 = (NAL 单元的 NALU 时间 - 数据包的 RTP 时间戳)。
如果 NALU 时间小于数据包的 RTP 时间戳,则时间戳偏移等于 NALU 时间 + (2^32 - 数据包的 RTP 时间戳)。
对于 MTAP 中的 “最早 ”多时间聚合单元,时间戳偏移必须为零。因此,MTAP 本身的 RTP 时间戳与最早的 NALU 时间相同。
参考说明:“最早 ”的多时间聚合单元是指如果聚合单元中包含的 NAL 单元封装在单个 NAL 单元数据包中,在 MTAP 的所有聚合单元中具有最小扩展 RTP 时间戳的单元。扩展时间戳是一种时间戳,它的位数超过 32 位,并能计算时间戳字段的缠绕,因此能确定时间戳缠绕时的最小值。这种 “最早 ”的聚合单元可能不是 MTAP 中聚合单元封装顺序中的第一个。最早 "的 NAL 单元也不必与 NAL 单元解码顺序中的第一个 NAL 单元相同。
下图展示了一个包含 MTAP16 类型的多时间聚合数据包的 RTP 数据包示例,该数据包包含两个多时间聚合单元,在图中标注为 1 和 2:
下图展示了一个包含 MTAP24 类型的多时间聚合数据包的 RTP 数据包示例,该数据包包含两个多时间聚合单元,在图中标注为 1 和 2:
六、Fragmentation Units (FUs)
根据《RFC 6184》第29页,这种有效载荷类型允许将一个 NAL 单元分割成多个 RTP 数据包。在应用层而不是依靠低层分片(如 IP)这样做有以下优点:
该有效载荷格式能够在 IPv4 网络上传输大于 64 kbytes 的 NAL 单元,而这些 NAL 单元可能存在于预先录制的视频中,尤其是高清格式中(每幅图像的切片数有限制,这导致每幅图像的 NAL 单元数有限制,从而可能产生较大的 NAL 单元)。
分片机制允许对单个 NAL 单元进行分片,并前向纠错。
片段只针对单个 NAL 单元,而不针对任何聚合数据包。一个 NAL 单元的片段由该 NAL 单元的整数个连续八位位组组成。NAL 单元的每个八位字节必须恰好是该 NAL 单元的一个片段的一部分。
同一 NAL 单元的片段必须以升序 RTP 序列号连续发送(在第一个片段和最后一个片段之间不发送同一 RTP 数据包流中的其他 RTP 数据包)。同样,一个 NAL 单元必须按 RTP 序列号顺序重新组装。
当一个 NAL 单元被分片并在分片单元 (FUs) 内传送时,它被称为分片 NAL 单元。STAP 和 MTAP 不得分片。FU 不得嵌套;也就是说,一个 FU 不得包含另一个 FU。
携带 FU 的 RTP 数据包的 RTP 时间戳被设置为分片 NAL 单元的 NALU 时间。
下图显示了 FU-A 的 RTP 有效载荷格式。FU-A 由一个八位位组的碎片单元指示符、一个八位位组的碎片单元报头和一个碎片单元有效载荷组成:
下图显示了 FU-B 的 RTP 有效载荷格式。FU-B 由一个八位位组的片段单元指示符、一个八位位组的片段单元头、一个解码顺序号(DON)(按网络字节顺序)和一个片段单元有效载荷组成。换句话说,FU-B 的结构与 FU-A 的结构相同,只是多了一个 DON 字段:
在interleaved packetization mode(交错分组模式)中,NAL 单元类型 FU-B 必须用于分片 NAL 单元的第一个分片单元。在任何其他情况下都不得使用 NAL 单元类型 FU-B。换句话说,在交错分组模式下,每个被分片的 NALU 的第一个分片都是 FU-B,然后是一个或多个 FU-A 分片。
FU 指示符八位位组的格式如下:
FU 指示符八位位组类型字段 28 和 29 的值分别标识 FU-A 和 FU-B。NRI 字段的值必须根据分片 NAL 单元中 NRI 字段的值设置。
FU 头的格式如下:
其中:
S:占1位。当设置为 1 时,起始位表示分片 NAL 单元的起始位置。当下面的 FU 有效载荷不是片段 NAL 单元有效载荷的开始时,开始位设为 0。
E:占1位。当设置为 1 时,End 位表示分片 NAL 单元的结束,即有效载荷的最后一个字节也是分片 NAL 单元的最后一个字节。当后续 FU 有效载荷不是片段 NAL 单元的最后一个片段时,End 位被置 0。
R:占1位。保留位必须等于 0,且必须被接收器忽略。
Type:占5位。下图中定义的 NAL 单元有效载荷类型:
说明:FU-Bs 中的 DON 字段允许网关将 NAL 单元分片到 FU-Bs,而无需按照 NAL 单元解码顺序组织传入的 NAL 单元。
片段 NAL 单元不得在一个 FU 中传输;也就是说,在同一个 FU 标头中,开始位和结束位不得同时置 1。
FU 有效载荷由片段 NAL 单元有效载荷的片段组成,这样,如果连续 FU 的片段单元有效载荷按顺序连接起来,就可以重建片段 NAL 单元的有效载荷。碎片 NAL 单元的 NAL 单元类型八位位组不包含在碎片单元有效载荷中,而是在碎片单元 FU 指示符八位位组的 F 和 NRI 字段以及 FU 标头的类型字段中传达碎片 NAL 单元的 NAL 单元类型八位位组信息。FU 有效载荷可以有任意数量的八位位组,也可以是空的。
说明:空 FU 允许在几乎无损的环境中减少某类发送方的延迟。这些发送方的特点是,他们在 NALU 完全生成之前,也就是在知道 NALU 大小之前,就将 NALU 片段打包。如果不允许使用零长度的 NALU 片段,发送者就必须在发送当前片段之前生成至少一个比特的下一个片段数据。由于 H.264 的特点,有时几个宏块占用的比特为零,这种情况并不可取,而且会增加延迟。不过,在使用零长度 NALU 片段(可能)时,应仔细权衡因传输时使用额外数据包而增加的至少部分 NALU 丢失风险。
如果一个分片单元丢失,接收方应按照传输顺序丢弃与同一分片 NAL 单元相对应的所有后续分片单元。端点或 MANE 中的接收方可将 NAL 单元的前 n 1 个片段聚合为一个(不完整的)NAL 单元,即使未收到该 NAL 单元的 n 个片段。在这种情况下,NAL 单元的 forbidden_zero_bit 必须设为 1,以表示语法违规。
相关文章:
音视频入门基础:RTP专题(12)——RTP中的NAL Unit Type简介
一、引言 RTP封装H.264时,RTP对NALU Header的nal_unit_type附加了扩展含义。 由《音视频入门基础:H.264专题(4)——NALU Header:forbidden_zero_bit、nal_ref_idc、nal_unit_type简介》可以知道,nal_unit…...
HTTP GET 请求示例
鸿蒙操作系统(HarmonyOS)是华为公司自主研发的面向全场景的分布式操作系统,旨在为用户提供一个安全、流畅且跨设备无缝连接的体验。它支持多种终端设备,如智能手机、平板电脑、智能电视、汽车等,并实现了模块化解耦&am…...
GO 快速升级Go版本
由于底层依赖升级了,那我们也要跟着升,go老版本已经不足满足需求了,必须要将版本升级到1.22.0以上 查看当前Go版本 命令查看go版本 go version [rootlocalhost local]# go version go version go1.21.4 linux/amd64 [rootlocalhost local]# …...
ELK搭建初入
ELK搭建: 1、安装ElasticSearch (用于存储收集到的日志信息) 解压安装包 tar -xzvf elasticsearch-8.17.2-linux-x86_64.tar.gz 启动es:bin/elasticsearch –d(默认端口号9200) 浏览器输入es地址。出现…...
【redis】数据类型之Bitfields
Redis的Bitfields(位域)与Bitmaps一样,在Redis中并不是一种独立的数据类型,而是一种基于字符串的数据结构,用于处理位级别的操作。允许用户将一个Redis字符串视作由一系列二进制位组成的数组,并对这些位进行…...
vscode软件中引入vant组件
一、vant简介 Vant 是一个轻量、可靠的移动端组件库,于 2017 年开源。 目前 Vant 官方提供了 Vue 2 版本、Vue 3 版本和微信小程序版本,并由社区团队维护 React 版本和支付宝小程序版本。 官网:介绍 - Vant Weapp 里面的快速上手的教程&a…...
DDR3模块、HDMI、晶振的布局原则
DDR3模块的布局原则 1.1片DDR就尽量靠近 我们CPU去摆放 2.DDRx2片,相对CPU需要严格对称 3.DDR滤波电容靠近管脚进行放置 4.端接匹配电阻摆放:串联端接电阻放置CPU端,并联端接电阻放置DDR端 5.地址线、控制线、时钟线都是单向传输,…...
夜莺监控 - 边缘告警引擎架构详解
前言 夜莺类似 Grafana 可以接入多个数据源,查询数据源的数据做告警和展示。但是有些数据源所在的机房和中心机房之间网络链路不好,如果由 n9e 进程去周期性查询数据并判定告警,那在网络链路抖动或拥塞的时候,告警就不稳定了。所…...
【CSP/信奥赛通关课(六):信奥赛STL专题】
CSP/信奥赛通关课(六):信奥赛STL专题 课程简介: 讲解信奥赛C中的STL核心组件:容器、迭代器、算法等,分析重点案例,让学生在实践的过程中熟练掌握信奥赛C相关的STL重要知识点。 课程教学目标&…...
【数据结构初阶第十五节】堆的应用(堆排序 + Top-K问题)
必须有为成功付出代价的决心,然后想办法付出这个代价。云边有个稻草人-CSDN博客 对于本节我们要提前掌握前一节课堆的相关实现才能学好本次的知识,一定要多画图多敲代码看看实现的效果是啥(Crazy!)开始吧! …...
SSL/TLS 协议、SSL证书 和 SSH协议 的区别和联系
下面是 SSL/TLS 协议、SSL证书 和 SSH协议 的区别和联系,包含它们的英文全称和中文全称: 属性SSL/TLS 协议SSL证书SSH 协议英文全称Secure Sockets Layer / Transport Layer SecuritySecure Sockets Layer CertificateSecure Shell Protocol中文全称安全…...
数据结构与算法-图论-最短路和其他的结合
介绍 最短路算法常与深度优先搜索(DFS)、动态规划(DP)、二分答案、拓扑排序等算法结合使用: - 最短路与DFS结合:在一些图的路径问题中,当需要访问特定的多个结点,且数据范围较小时…...
C++day6
编写一个如下场景: 有一个英雄Hero类,私有成员,攻击,防御,速度,生命值,以及所有的set get 方法 编写一个 武器 Weapon 类,拥有私有成员攻击力,以及set get 方法 编写一个…...
【初阶数据结构】星河中的光影 “排” 象:排序(下)
文章目录 4.交换排序4.1 冒泡排序(BubbleSort)4.2 快速排序(QuickSort)4.2.1 hoare版本4.2.2 挖坑法4.2.3 前后指针法4.2.4 非递归实现 5.归并排序(MergeSort)5.1 递归实现5.2 非递归实现5.2.1 一次性全部拷…...
C++ 练习1
阐述g 有哪些常用的选项,该选项有什么作用 选项作用-o <file>指定输出文件名(默认生成 a.out)-c仅编译生成目标文件(.o 文件),不链接-E只进行预处理,输出预处理后的代码(展开…...
Ajax数据采集与分析详解
文章目录 1. 什么是 Ajax?2. Ajax 的工作原理3. Ajax 在网页中的应用场景4. 爬取 Ajax 数据的方法4.1 分析网络请求4.2 模拟 Ajax 请求4.3 使用 Selenium 模拟浏览器4.4 使用 Headless 浏览器 5. 处理动态参数6. 处理分页和滚动加载7. 处理反爬虫机制8. 数据存储9. …...
协方差(Covariance)与得分函数:从Fisher信息矩阵看统计关联
协方差与得分函数:从Fisher信息矩阵看统计关联 协方差(Covariance)是统计学中一个基础但强大的概念,它描述了两个随机变量之间的关系。在Fisher信息矩阵中,协方差以一种特别的形式出现:得分函数的协方差。…...
【CSS 选择器的特异度 CSS 继承 CSS 求值过程解析 CSS 布局方式及相关技术】
以下是关于 CSS 选择器特异度、继承、求值过程及布局技术 的详细解析,结合核心概念和实际应用场景: 一、CSS 选择器特异度(Specificity) 1. 特异度规则 特异度用于决定当多个选择器作用于同一元素时,哪个样式优先级更…...
Vue+ElementPlus的一些问题修复汇总
目录 一、ElementPlusVue-router做侧边栏问题 二、 组件样式问题 2.1修改文字颜色、大小、粗细、边框的颜色 2.2修改聚焦后文字的颜色、边框的颜色 2.3修改鼠标悬浮时文字的颜色、边框的颜色 三、 组件样式问题 3.1修改文字颜色、大小、粗细 四、 样式问题 4.1当数据为空…...
单链表删除算法(p=L; j=0;与p=p->next;j=1的辨析)
算法描述 Status ListDelete(LinkList &L,int i) { //在带头结点的单链表 L 中,删除第 i 个元素 pL; j0; while ((p->next) && (j<i-1)) {pp->next; j;} if (!(p->next)||(j>i-1)) return ERROR; qp->nex…...
从单片机的启动说起一个单片机到点灯发生了什么下——使用GPIO点一个灯
目录 前言 HAL库对GPIO的抽象 核心分析:HAL_GPIO_Init 前言 我们终于到达了熟悉的地方,对GPIO的初始化。经过漫长的铺垫,我们终于历经千辛万苦,来到了这里。关于GPIO的八种模式等更加详细的细节,由于只是点个灯&am…...
vue2项目打包后js文件过大, 首次加载缓慢
vue2项目打包后js文件过大, 首次加载缓慢 安装插件 npm i compression-webpack-plugin6.1.1 -D配置vue.config.js const CompressionWebpackPlugin require(compression-webpack-plugin)module.exports {configureWebpack: {plugins:[new CompressionWebpackPlugin({filen…...
llama.cpp 一键运行本地大模型 - Windows
文章目录 llama.cpp 一键运行本地大模型 - Windows嘿,咱来唠唠 llama.cpp 这玩意儿!gguf 格式是啥?咱得好好说道说道基座模型咋选?所需物料,咱得准备齐全咯核心命令,得记牢啦运行方式咋选?测试应…...
Android 老项目 jcenter 库失效
最近重新维护了一些老项目发现大部分jcenter库失效了, Could not resolve com.xx:2.1.3. 如果你也遇到了,不妨试试 替换为 aliyun的jcenter服务,就不用一个个找代替库了。 project 下的 build.gradle 文件添加: maven { url htt…...
MyBatis简明教程
MyBatis 是一个用于简化数据库操作的持久层框架,它的核心思想是 将 SQL 与 Java 代码解耦,让开发者专注于 SQL 的编写,同时自动处理重复的数据库操作步骤。 一、核心思想:SQL 与 Java 解耦 传统 JDBC 需要开发者手动管理数据库连…...
【Golang 面试题】每日 3 题(六十八)
✍个人博客:Pandaconda-CSDN博客 📣专栏地址:http://t.csdnimg.cn/UWz06 📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~ ❤️如果有收获的话,欢迎点赞👍收藏…...
DeepSeek个人知识库
deepseek构建个人知识库 安装软件链接 : 安装链接 先在本地把deepseek跑起来,本地部署deepseek见前文链接: 本地部署ollama # 目前软件只支持1.5b小模型,将就着用 ollama run deepseek-r1:1.5b等服务器启动后开启软件 上传文件 输入消息 (…...
力扣练习之字符串的最大公因子
使用语言:c 题目: 对于字符串 s 和 t,只有在 s t t t ... t t(t 自身连接 1 次或多次)时,我们才认定 “t 能除尽 s”。 给定两个字符串 str1 和 str2 。返回 最长字符串 x,要求满足 x 能…...
姿态矩阵/旋转矩阵/反对称阵
物理意义,端点矢量角速率叉乘本身向量; 负号是动系b看固定系i是相反的; 一个固定 在惯性导航解算中,旋转矢量的叉乘用于描述姿态矩阵的微分方程。你提到的公式中, ω i b b \boldsymbol{\omega}_{ib}^b \times ωibb…...
项目一 - 任务3:搭建Java集成开发环境IntelliJ IDEA
通过本次实战,我们成功搭建了Java集成开发环境IntelliJ IDEA,并完成了多个任务。首先,安装了IntelliJ IDEA并进行了个性化设置,如选择主题、调整字体和编码等。接着,创建了Java项目、包和类,编写并运行了简…...
C++的类型转换
目录 一、隐式类型转换的触发场景 1.基本数据类型间的转换 i.提升转换 ii.截断转换 2.类与对象的转换 i.单参数构造函数 ii.类型转换运算符 3.继承体系中的指针/引用转换 向上转型 二、隐式转换的风险与问题 1.意外行为 2.二义性错误 3.性能损耗 三、C强制类型转…...
嵌入式项目:STM32刷卡指纹智能门禁系统
本文详细介绍基于STM32的刷卡指纹智能门禁系统。 获取资料/指导答疑/技术交流/选题/帮助,请点链接: https://gitee.com/zengzhaorong/share_contact/blob/master/stm32.txt 1 系统功能 1.1 功能概述 本系统由STM32硬件端(下位机)…...
DeepSeek基础之机器学习
文章目录 一、核心概念总结(一)机器学习基本定义(二)基本术语(三)假设空间(四)归纳偏好(五)“没有免费的午餐”定理(NFL 定理) 二、重…...
Docker 搭建 Nginx 服务器
系列文章目录 Docker 搭建 Nginx 服务器 系列文章目录前言一、准备工作二、设置 Nginx 容器的目录结构三、启动一个临时的 Nginx 容器来复制配置文件四、复制 Nginx 配置文件到本地目录五、删除临时 Nginx 容器六、创建并运行 Nginx 容器,挂载本地目录七、修改 ngin…...
【Docker基础】理解 Docker:本质、性质、架构与核心组件
文章目录 Docker 本质Docker 的引擎迭代Docker 和虚拟机的区别Docker 为什么比虚拟机资源利用率高,速度快?Docker 和 JVM 虚拟化的区别Docker 版本1. LXC (Linux Containers)2. libcontainer3. Moby4. docker-ce5. docker-ee总结: Docker 架构…...
QT:QLinearGradient、QRadialGradient、QConicalGradient
QLinearGradient QLinearGradient 是 Qt 框架中用于创建线性渐变的类,它允许在图形绘制中实现颜色沿着一条直线的平滑过渡效果。以下是关于 QLinearGradient 的详细介绍: 基本概念:线性渐变是指颜色从一个点(起始点)沿…...
MySql:Authentication plugin ‘caching sha2 password‘ cannot be loaded
报错问题解释 在 MySQL 数据库中,如果你尝试使用 caching_sha2_password 插件进行认证,但是遇到错误信息 "Authentication plugin caching sha2 password cannot be loaded",这通常意味着客户端库或者连接器不兼容或者没有正确配置…...
c++类知识点复习与总结
类 c 是一种人机交互的面向对象的编程语言,面向对象思想主要体现在 类 上。 类是具有相同属性和相同行为的对象的集合, 具有封装,继承,多态的特性。 类的定义 class 类名 { }; 封装 例如:人就是一种类…...
Redis快速入门
一、Redis介绍 Redis 是一个开源(BSD许可)的,内存中的数据结构存储系统,它可以用作数据库、缓存和消息中间件。 它支持多种类型的数据结构,如 字符串(strings),散列(has…...
嵌入式开发:傅里叶变换(5):STM32和Matlab联调验证FFT
目录 1. MATLAB获取 STM32 的原始数据 2. 将数据上传到电脑 3. MATLAB 接收数据并验证 STM32进行傅里叶代码 结果分析 STM32 和 MATLAB 联调是嵌入式开发中常见的工作流程,通常目的是将 STM32 采集的数据或控制信号传输到 MATLAB 中进行实时处理、分析和可视化…...
LLM/VLM进行票据识别工作
票据识别任务的需求是给定不同类型的票据图像,提取出指定的字段值,以json格式给出结构化信息。 目前的范式包括OCR,OCRLLM, OCRVLM,VLM四种方法。 一、OCR 利用OCR技术进行图像文字识别。 例如:https://github.c…...
AWS SDK for Java 1.x 403问题解决方法和原因
问题表现 使用AWS SDK for Java 1.x访问S3,已经确认文件存在,且具有权限,仍然出现403 Forbidden应答。 解决方法 升级到AWS SDK for Java 2.x。 问题原因 AWS签名机制严格依赖请求的精确路径格式,任何URI的差异(如…...
Spring Boot 项目中,JDK 动态代理和 CGLIB 动态代理的使用
在 Spring Boot 项目中,JDK 动态代理和 CGLIB 动态代理都是实现 AOP (面向切面编程) 的重要技术。 它们的主要区别在于代理对象的生成方式和适用范围。 下面详细介绍它们的使用场景: 1. JDK 动态代理 (JDK Dynamic Proxy) 原理: JDK 动态代理…...
蓝桥杯备赛-精卫填海-DP
精卫终于快把东海填平了!只剩下了最后的一小片区域了。同时,西山上的木石也已经不多了。精卫能把东海填平吗? 事实上,东海未填平的区域还需要至少体积为 v 的木石才可以填平,而西山上的木石还剩下 n 块,每块…...
萌新学 Python 之闭包函数
闭包函数:在一个函数体内嵌套函数,是一个函数对象,允许在内部函数中修改或引用外部函数的变量 闭包函数对数据有封存功能 闭包函数需要满足以下几个条件: 1.函数必须有一个嵌套函数,在定义函数时,内部再…...
AI创作教程:用deepseek和猫箱做互动故事游戏
年轻的时候我看过典型的玛丽苏文学、小妞文学,老了虽然识破这是给女孩编织的琉璃般的梦,看起来梦幻美丽其实一击就碎,会伤人的碎渣渣。【叠甲完毕】 本来我想用橙光的,但是橙光的话,最好把剧本和立绘都多打磨一下。快…...
【Linux探索学习】第三十一弹——线程互斥与同步(下):深入理解确保线程安全的机制
线程互斥与同步(上):【Linux探索学习】第三十弹——线程互斥与同步(上):深入理解线程保证安全的机制-CSDN博客 Linux探索学习: https://blog.csdn.net/2301_80220607/category_12805278.html?…...
博客系统完整开发流程
前言 通过前⾯课程的学习, 我们掌握了Spring框架和MyBatis的基本使用, 并完成了图书管理系统的常规功能开发, 接下来我们系统的从0到1完成⼀个项⽬的开发. 企业开发的流程 1. 需求评审(产品经理(PM)会和运营(想口号),UI,测试,开发等沟通) ,会涉及到背景/目标/怎么做,可能会有多…...
【C++】面试常问八股
5、内存管理 野指针 野指针指的是未进行初始化或未清零的指针,不是NULL指针野指针产生原因及解决方案: 指针变量未初始化:指针变量定义时若未初始化,则其指向的地址是随机的,不为NULL;定义时初始化为NULL…...
自定义提交按钮触发avue-form绑定的submit事件
场景 使用avue-form时,提交按钮会绑定至form区域下方,如果想自定义按钮位置,需要通过dialog的footer位置进行编写,例如: <avue-form ref"form" v-model"dataInfo" :option"dataInfoOpti…...