Hi3518E官方录像例程源码流程分析(五)
文章目录
- Venc理论部分
- 阶段五 开始视频流编码
- SAMPLE_COMM_VENC_Start()
- s32Ret = SAMPLE_COMM_SYS_GetPicSize(enNorm, enSize, &stPicSize);
- 创造Venc channal
- 码率控制
- CBR
- FIXQP
- VBR
- HI_MPI_VENC_CreateChn
- HI_MPI_VENC_StartRecvPic
- SAMPLE_COMM_VENC_BindVpss 绑定VPsschn0 到Vencchn0
- HI_MPI_SYS_Bind()
源码地址 + 文档资料 – 提取码: chmr
本专栏分析的是mpp\venc\sample\sample_venc.c
Venc理论部分
VENC 模块由编码通道子模块(VENC)和编码协议子模块(H.264/H.265/JPEG/MJPEG)组成。
通道支持接收 YUV 格式图像输入,支持格式为 Semi-planar YUV 4:2:0 或 Semi-planar YUV 4:2:2,其中 H.264/H.265 只支持 Semi-planar YUV 4:2:0,JPEG/MJPEG 支持 Semi-planar YUV 4:2:0 或 Semi-planar YUV 4:2:2。另外,Hi3518EV200 能够支持单分量输入(只存在 Y 分量)。通道模块接收外部原始图像数据,而不关心图像数据是来自哪个外部模块。
通道接收到图像之后,比较图像尺寸和编码通道尺寸:
- 如果输入图像比编码通道尺寸大,VENC 将按照编码通道尺寸大小,调用 VGS 对源图像进行缩小,然后对缩小之后的图像进行编码。
- 如果输入图像比编码通道尺寸小,VENC 丢弃源图像。VENC 不支持放大输入图像编码。
- 如果输入图像与编码通道尺寸相当,VENC 直接接受源图像,进行编码。
编码通道作为基本容器,保存编码通道的多种用户设置和管理编码通道的多种内部资源。编码通道完成图像转化为码流的功能,具体由码率控制器和编码器协同完成。这里的编码器指的是狭义上的编码器,只完成编码功能。码率控制器提供了对编码参数的控制和调整,从而对输出码率进行控制。
阶段五 开始视频流编码
if(s32ChnNum >= 1){VpssGrp = 0;VpssChn = 0;VencChn = 0;//bind VencChn0 to VpssChn0s32Ret = SAMPLE_COMM_VENC_Start(VencChn, enPayLoad[0],\gs_enNorm, enSize[0], enRcMode,u32Profile);if (HI_SUCCESS != s32Ret){SAMPLE_PRT("Start Venc failed!\n");goto END_VENC_1080P_CLASSIC_5;}//bind VencChn0 to VpssChn0s32Ret = SAMPLE_COMM_VENC_BindVpss(VencChn, VpssGrp, VpssChn);if (HI_SUCCESS != s32Ret){SAMPLE_PRT("Start Venc failed!\n");goto END_VENC_1080P_CLASSIC_5;}}
SAMPLE_COMM_VENC_Start()
s32Ret = SAMPLE_COMM_SYS_GetPicSize(enNorm, enSize, &stPicSize);
首先是前面出现过很多次的GetPicSize,就不再哆嗦了
创造Venc channal
首先命中enType的H264
case PT_H264:{stH264Attr.u32MaxPicWidth = stPicSize.u32Width;stH264Attr.u32MaxPicHeight = stPicSize.u32Height;stH264Attr.u32PicWidth = stPicSize.u32Width;/*the picture width*/stH264Attr.u32PicHeight = stPicSize.u32Height;/*the picture height*/stH264Attr.u32BufSize = stPicSize.u32Width * stPicSize.u32Height;/*stream buffer size*/stH264Attr.u32Profile = u32Profile;/*0: baseline; 1:MP; 2:HP; 3:svc_t */stH264Attr.bByFrame = HI_TRUE;/*get stream mode is slice mode or frame mode?*/stH264Attr.u32BFrameNum = 0;/* 0: not support B frame; >=1: number of B frames */stH264Attr.u32RefNum = 1;/* 0: default; number of refrence frame*/memcpy(&stVencChnAttr.stVeAttr.stAttrH264e, &stH264Attr, sizeof(VENC_ATTR_H264_S));if(SAMPLE_RC_CBR == enRcMode){stVencChnAttr.stRcAttr.enRcMode = VENC_RC_MODE_H264CBR;stH264Cbr.u32Gop = (VIDEO_ENCODING_MODE_PAL== enNorm)?25:30;stH264Cbr.u32StatTime = 1; /* stream rate statics time(s) */stH264Cbr.u32SrcFrmRate = (VIDEO_ENCODING_MODE_PAL== enNorm)?25:30;/* input (vi) frame rate */stH264Cbr.fr32DstFrmRate = (VIDEO_ENCODING_MODE_PAL== enNorm)?25:30;/* target frame rate */switch (enSize){case PIC_QCIF:stH264Cbr.u32BitRate = 256; /* average bit rate */break;case PIC_QVGA: /* 320 * 240 */case PIC_CIF: stH264Cbr.u32BitRate = 512;break;case PIC_D1:case PIC_VGA: /* 640 * 480 */stH264Cbr.u32BitRate = 1024*2;break;case PIC_HD720: /* 1280 * 720 */stH264Cbr.u32BitRate = 1024*2;break;case PIC_HD1080: /* 1920 * 1080 */stH264Cbr.u32BitRate = 1024*4;break;case PIC_5M: /* 2592 * 1944 */stH264Cbr.u32BitRate = 1024*8;break; default :stH264Cbr.u32BitRate = 1024*4;break;}stH264Cbr.u32FluctuateLevel = 0; /* average bit rate */memcpy(&stVencChnAttr.stRcAttr.stAttrH264Cbr, &stH264Cbr, sizeof(VENC_ATTR_H264_CBR_S));}else if (SAMPLE_RC_FIXQP == enRcMode) {stVencChnAttr.stRcAttr.enRcMode = VENC_RC_MODE_H264FIXQP;stH264FixQp.u32Gop = (VIDEO_ENCODING_MODE_PAL== enNorm)?25:30;stH264FixQp.u32SrcFrmRate = (VIDEO_ENCODING_MODE_PAL== enNorm)?25:30;stH264FixQp.fr32DstFrmRate = (VIDEO_ENCODING_MODE_PAL== enNorm)?25:30;stH264FixQp.u32IQp = 20;stH264FixQp.u32PQp = 23;memcpy(&stVencChnAttr.stRcAttr.stAttrH264FixQp, &stH264FixQp,sizeof(VENC_ATTR_H264_FIXQP_S));}else if (SAMPLE_RC_VBR == enRcMode) {stVencChnAttr.stRcAttr.enRcMode = VENC_RC_MODE_H264VBR;stH264Vbr.u32Gop = (VIDEO_ENCODING_MODE_PAL== enNorm)?25:30;stH264Vbr.u32StatTime = 1;stH264Vbr.u32SrcFrmRate = (VIDEO_ENCODING_MODE_PAL== enNorm)?25:30;stH264Vbr.fr32DstFrmRate = (VIDEO_ENCODING_MODE_PAL== enNorm)?25:30;stH264Vbr.u32MinQp = 10;stH264Vbr.u32MaxQp = 40;switch (enSize){case PIC_HD720: /* 1280 * 720 */stH264Vbr.u32MaxBitRate = 1024*3;break;default :stH264Vbr.u32MaxBitRate = 1024*4;break;}memcpy(&stVencChnAttr.stRcAttr.stAttrH264Vbr, &stH264Vbr, sizeof(VENC_ATTR_H264_VBR_S));}else{return HI_FAILURE;}}break;
首先是这两步
stH264Attr.u32MaxPicWidth = stPicSize.u32Width;
stH264Attr.u32MaxPicHeight = stPicSize.u32Height;
stH264Attr.u32PicWidth = stPicSize.u32Width;/*the picture width*/
stH264Attr.u32PicHeight = stPicSize.u32Height;/*the picture height*/
通过上面资料可知
- 如果输入图像比编码通道尺寸大,VENC 将按照编码通道尺寸大小,调用 VGS 对源图像进行缩小,然后对缩小之后的图像进行编码。
- 如果输入图像比编码通道尺寸小,VENC 丢弃源图像。VENC 不支持放大输入图像编码。
- 如果输入图像与编码通道尺寸相当,VENC 直接接受源图像,进行编码。
所以这里直接把图像尺寸大小给到编码通道,这样既不会丢弃源图像,也不会对图像进行缩小
码率控制
CBR
CBR(Constant Bit Rate)固定比特率。即在码率统计时间内保证编码码率平稳。码率稳定主要由两个量来评估,这两个量都可以由用户在创建编码通道时指定。
-
码率统计时间 u32StatTime
单位为秒(s),码率统计时间越长,每帧图像的码率波动对于码率调节的影响越弱,码率的调节会更缓慢,图像质量的波动会更轻微;码率统计时间越短,每帧图像的码率波动对于码率调节的影响越强,图像码率的调节会更灵敏,图像质量的波动会更剧烈。 -
行级码率控制调节幅度 u32RowQpDelta
行级码率控制调节幅度是一帧内行级调节的最大范围,其中行级以宏块行为单位。调节幅度越大,允许行级调整的 QP 范围越大,码率越平稳。对于图像复杂度分布不均匀的场景,行级码率控制调节幅度设置过大会带来图像质量不均匀。
stVencChnAttr.stRcAttr.enRcMode = VENC_RC_MODE_H264CBR;
stH264Cbr.u32Gop = (VIDEO_ENCODING_MODE_PAL== enNorm)?25:30;
stH264Cbr.u32StatTime = 1; /* stream rate statics time(s) */
stH264Cbr.u32SrcFrmRate = (VIDEO_ENCODING_MODE_PAL== enNorm)?25:30;/* input (vi) frame rate */
stH264Cbr.fr32DstFrmRate = (VIDEO_ENCODING_MODE_PAL== enNorm)?25:30;/* target frame rate */
case PIC_HD720: /* 1280 * 720 */stH264Cbr.u32BitRate = 1024*2;
FIXQP
Fix Qp 固定 Qp 值。在码率统计时间内,编码图像所有宏块 Qp 值相同,采用用户设定
的图像 Qp 值,I 帧和 P 帧的 QP 值可以分别设置。
stVencChnAttr.stRcAttr.enRcMode = VENC_RC_MODE_H264FIXQP;
stH264FixQp.u32Gop = (VIDEO_ENCODING_MODE_PAL== enNorm)?25:30;
stH264FixQp.u32SrcFrmRate = (VIDEO_ENCODING_MODE_PAL== enNorm)?25:30;
stH264FixQp.fr32DstFrmRate = (VIDEO_ENCODING_MODE_PAL== enNorm)?25:30;
stH264FixQp.u32IQp = 20;
stH264FixQp.u32PQp = 23;
VBR
VBR(Variable Bit Rate)可变比特率,即允许在码率统计时间内编码码率波动,从而保证编码图像质量平稳。以 H.264 编码为例,VENC 模块提供用户可设置 MaxQp,MinQp,MaxBitrate 和 ChangePos。MaxQp,MinQp 用于控制图像的质量范围, MaxBitrate 用于钳位码率统计时间内的最大编码码率,ChangePos 用于控制开始调整Qp 的码率基准线。当编码码率大于 MaxBitrateChangePos 时,图像 qp 会逐步向MaxQp 调整,如果图像 QP 达到 MaxQp,QP 会被钳位到最大值,MaxBitrate 的钳位效果失效,编码码率有可能会超出 MaxBitrate。当编码码率小于 MaxBitrateChangePos时,图像 QP 会逐步向 MinQp 调整,如果图像 QP 达到 MinQp,此时编码的码率已经达到最大值,而且图像质量最好。
stVencChnAttr.stRcAttr.enRcMode = VENC_RC_MODE_H264VBR;
stH264Vbr.u32Gop = (VIDEO_ENCODING_MODE_PAL== enNorm)?25:30;
stH264Vbr.u32StatTime = 1;
stH264Vbr.u32SrcFrmRate = (VIDEO_ENCODING_MODE_PAL== enNorm)?25:30;
stH264Vbr.fr32DstFrmRate = (VIDEO_ENCODING_MODE_PAL== enNorm)?25:30;
stH264Vbr.u32MinQp = 10;
stH264Vbr.u32MaxQp = 40;
HI_MPI_VENC_CreateChn
通过上面设置好的参数创建Venc通道
HI_MPI_VENC_StartRecvPic
开始接收Venc图像
SAMPLE_COMM_VENC_BindVpss 绑定VPsschn0 到Vencchn0
VPsschn2 到Vencchn02的部分在if(s32ChnNum >= 2)
HI_S32 s32Ret = HI_SUCCESS;MPP_CHN_S stSrcChn;MPP_CHN_S stDestChn;stSrcChn.enModId = HI_ID_VPSS;stSrcChn.s32DevId = VpssGrp;stSrcChn.s32ChnId = VpssChn;stDestChn.enModId = HI_ID_VENC;stDestChn.s32DevId = 0;stDestChn.s32ChnId = VeChn;s32Ret = HI_MPI_SYS_Bind(&stSrcChn, &stDestChn);if (s32Ret != HI_SUCCESS){SAMPLE_PRT("failed with %#x!\n", s32Ret);return HI_FAILURE;}
HI_MPI_SYS_Bind()
相关文章:
Hi3518E官方录像例程源码流程分析(五)
文章目录 Venc理论部分阶段五 开始视频流编码SAMPLE_COMM_VENC_Start()s32Ret SAMPLE_COMM_SYS_GetPicSize(enNorm, enSize, &stPicSize);创造Venc channal 码率控制CBRFIXQPVBRHI_MPI_VENC_CreateChnHI_MPI_VENC_StartRecvPic SAMPLE_COMM_VENC_BindVpss 绑定VPsschn0 到…...
JavaScript性能优化实战(3):内存管理与泄漏防范
JavaScript内存模型与垃圾回收机制解析 JavaScript作为一种高级编程语言,其内存管理过程对开发者而言大部分是透明的,但了解其内存模型和垃圾回收机制对于编写高性能应用至关重要。 JavaScript的内存分配与管理 JavaScript引擎在执行代码时会自动为变量和对象分配内存,主…...
基于自主大型语言模型代理的AIoT智能家居
中文标题:基于自主大型语言模型代理的AIoT智能家居 英文标题:AIoT Smart Home via Autonomous LLM Agents 作者信息 Dmitriy Rivkin, Francois Hogan, Amal Feriani, Abhisek Konar, Adam Sigal, Xue Liu, Gregory Dudek 论文出处 《IEEE Internet o…...
Maven 手动添加 JAR 包到本地仓库笔记
Maven 手动添加 JAR 包到本地仓库笔记 背景 Maven 默认从中央仓库(repo1.maven.org)自动下载依赖,但在以下场景中可能遇到问题: 网络限制: 国内访问 Maven 中央仓库速度较慢(尤其未配置镜像时)…...
CS 系列 USB3.0 工业面阵相机不同快门类型的作用及其区别
关于 CS 系列 USB3.0 工业面阵相机 中不同快门类型的作用及其区别的详细分析: 1. 快门类型概述 工业面阵相机的快门类型主要分为 机械快门、电子快门(包括全局快门和滚动快门)和 电子前帘快门,但机械快门在工业相机中较少见&…...
【官方正版,永久免费】Adobe Camera Raw 17.2 win/Mac版本 配合Adobe22-25系列软
Adobe Camera Raw 2025 年 2 月版(版本 17.2)。目前为止最新版新版已经更新2个月了,我看论坛之前分享的还是2024版,遂将新版分享给各位。 Adobe Camera Raw,支持Photoshop,lightroom等Adobe系列软件&#…...
怎么减少tcp 的time_wait时间
减少 TCP 连接的 TIME_WAIT 状态时间是运维中常见的优化问题,尤其是在高并发和大量短连接的场景下,过多的 TIME_WAIT 会占用系统资源,影响系统性能。下面是一些常见的优化方法和措施。 🔹 1. 修改 TCP 参数 ✅ 调整 tcp_fin_time…...
RK3568平台开发系列讲解(调试篇)debugfs API接口及案例
更多内容可以加入Linux系统知识库套餐(教程+视频+答疑) 🚀返回专栏总目录 文章目录 一、Debugfs API1.1、创建目录和文件1.2、导出数字1.3、绑定一个 size_t 类型的变量1.4、绑定一个 u32 类型的变量1.5、绑定一块二进制数据1.6、绑定到一堆寄存器集合1.7、修改 debugfs…...
文件【Linux操作系统】
文章目录 文件前置知识访问文件之前,为什么文件必须打开?文件的管理 标准流标准错误流的作用是什么? 进程和文件的关系在用户层面文件描述符是访问文件的唯一方式,因为系统调用接口只能通过文件描述符来找到对应的文件 操作文件的…...
PVT曲线:预测高分子材料收缩与翘曲的“热力学密码”
在高分子材料的广阔领域中,PVT 曲线作为一种关键的研究工具,正逐渐展现出其不可忽视的重要性。PVT 曲线,即聚合物材料的压力(Pressure)、体积(Volume)和温度(Temperature)…...
IDEA中Quarkus框架(3.13版本)容器编排、压测与调优、注意事项等
Quarkus框架学习的第一部分,请访问: IDEA中Quarkus框架(3.13版本)开发、调试、部署、打包等 五、docker-compose容器编排 1、创建编排文件 cd quarkus-helloworldvi docker-compose.ymldocker-compose.yml内容如下: # yaml 配置实例 ver…...
vue+django+LSTM微博舆情分析系统 | 深度学习 | 食品安全分析
文章结尾部分有CSDN官方提供的学长 联系方式名片 文章结尾部分有CSDN官方提供的学长 联系方式名片 关注B站,有好处! 编号: D031 LSTM 架构:vuedjangoLSTMMySQL 功能: 微博信息爬取、情感分析、基于负面消极内容舆情分析…...
CSS初识
CSS能够对⽹⻚中元素位置的排版进⾏像素级精确控制,实现美化⻚⾯的效果.能够做到⻚⾯的样式和结构分离。 可以理解给页面化妆,美化排版。 基本语法规范 选择器{⼀条/N条声明} 选择器决定针对谁修改(找谁) 声明决定修改啥(⼲啥) 声明的属性是键值对,…...
Kafka 主题设计与数据接入机制
一、前言:万物皆流,Kafka 是入口 在构建实时数仓时,Kafka 既是 数据流动的起点,也是后续流处理系统(如 Flink)赖以为生的数据源。 但“消息进来了” ≠ “你就能处理好了”——不合理的 Topic 设计、接入方…...
文件系统常见函数
write系统调用 #include <unistd.h> ssize_t write(int fd, const void *buf, size_t count); 参数说明 fd 文件描述符,指向已打开的文件或设备(如标准输出 1、文件句柄等 buf 指向待写入数据的缓冲区指针,支持任意数据类型…...
深入理解 G1 GC:已记忆集合(RSet)与收集集合(CSet)详解
已记忆集合(RSet)与收集集合(CSet)详解 深入理解 G1 GC:已记忆集合(RSet)与收集集合(CSet)详解一、 引言:G1 GC 的基石二、 已记忆集合 (RSet):跟…...
Android Cordova 开发 - Cordova 解读初始化项目(index.html meta、Cordova.js、config.xml)
一、index.html meta 1、Content-Security-Policy (1)基本介绍 <meta http-equiv"Content-Security-Policy" content"default-src self data: https://ssl.gstatic.com unsafe-eval; style-src self unsafe-inline; media-src *; i…...
uv run 都做了什么?
uv run 都做了什么? uv run <命令> [参数...] 的主要作用是:在一个由 uv 管理或发现的 Python 虚拟环境中,执行你指定的 <命令>。它会临时配置一个子进程的环境,使其表现得如同该虚拟环境已经被激活一样。这意味着&am…...
Maven 依赖坐标与BOM统一管理
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
UV: Python包和项目管理器(从入门到不放弃教程)
目录 UV: Python包和项目管理器(从入门到不放弃教程)1. 为什么用uv,而不是conda或者pip2. 安装uv(Windows)2.1 powershell下载2.2 winget下载2.3 直接下载安装包 3. uv教程3.1 创建虚拟环境 (uv venv) 4. uvx5. 此pip非…...
32单片机——GPIO的工作模式
1、GPIO GPIO(General Purpose Input Output,通用输入输出端口)是控制或者采集外部器件的信息的外设,即负责输入输出。它按组分配,每组16个IO口,组数视芯片而定。STM32F103ZET6芯片是144脚的芯片࿰…...
Science Robotics 新型层级化架构实现250个机器人智能组队,“单点故障”系统仍可稳定运行
近期,比利时布鲁塞尔自由大学博士生朱炜煦与所在团队提出了一种创新的机器人群体架构——“自组织神经系统”(SoNS,Self-organizing Nervous System)。 它通过模仿自然界中的生物神经系统的组织原理,为机器人群体建立了…...
【HFP】蓝牙HFP协议来电处理机制解析
目录 一、协议概述与技术背景 1.1 HFP协议演进 1.2 核心角色定义 1.3 关键技术指标 二、来电接入的核心交互流程 2.1 基础流程概述:AG 的 RING 通知机制 2.2 HF 的响应:本地提醒与信令交互 三、带内铃声(In-Band Ring Tone࿰…...
03-谷粒商城笔记
一个插件的install和生命周期的报错是不一样的 Maven找不到ojdbc6和sqljdbc4依赖包 这时候我找到了jar包,然后我就先找到一个jar安装到了本地仓库。 在终端上进行命令了: mvn install:install-file -DfileD:\ojdbc6-11.2.0.4.jar -DgroupIdcom.oracle …...
PHP 反序列化CLI 框架类PHPGGC 生成器TPYiiLaravel 等利用
# 反序列化链项目 -PHPGGC&NotSoSecure -NotSoSecure https://github.com/NotSoSecure/SerializedPayloadGenerator 为了利用反序列化漏洞,需要设置不同的工具,如 YSoSerial(Java) 、 YSoSerial.NET 、 PHPGGC 和它的先决条件。 Deserializati…...
LeetCode热题100——283. 移动零
给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,3,12,0,0] 示例 2: 输入: nums [0] 输出:…...
C++入门小馆: 探寻vector类
嘿,各位技术潮人!好久不见甚是想念。生活就像一场奇妙冒险,而编程就是那把超酷的万能钥匙。此刻,阳光洒在键盘上,灵感在指尖跳跃,让我们抛开一切束缚,给平淡日子加点料,注入满满的pa…...
力扣hot100_链表(3)_python版本
一、25. K 个一组翻转链表 1.1、206. 反转链表 py代码 class ListNode:def __init__(self, val0, next node):self.val valself.next next class Solution:def reverseList(self, head):pre Nonecur headwhile cur:next cur.nextcur.next prepre curcur nextreturn p…...
Lua 第9部分 闭包
在 Lua 语言中,函数是严格遵循词法定界的第一类值。 “第一类值”意味着 Lua 语言中的函数与其他常见类型的值(例如数值和字符串)具有同等权限: 一个程序可以将某个函数保存到变量中(全局变量和局部变量均可&a…...
【Linux】冯诺依曼体系结构及操作系统架构图的具体剖析
目录 一、冯诺依曼体系结构 1、结构图 2、结构图介绍: 3、冯诺依曼体系的数据流动介绍 4、为什么在该体系结构中要存在内存? 二、操作系统架构图介绍 1、操作系统架构图 2、解析操作系统架构图 3、为什么要有操作系统? 前些天发现了一…...
解析虚拟机与Docker容器化服务的本质差异及Docker核心价值
解析虚拟机与Docker容器化服务的本质差异及Docker核心价值 1.1 硬件虚拟化与操作系统级虚拟化 虚拟机(VM)基于硬件级虚拟化技术(Hypervisor),通过模拟完整硬件栈(CPU、内存、存储、网络)创建独…...
FreeRTOS深度解析:队列集(Queue Sets)的原理与应用
FreeRTOS深度解析:队列集(Queue Sets)的原理与应用 什么是队列集? 在FreeRTOS中,队列集(Queue Sets,英文名xQueueSet)是一种强大的数据结构,用于高效管理多个队列。它的…...
java将pdf转换成word
1、jar包准备 在项目中新增lib目录,并将如下两个文件放入lib目录下 aspose-words-15.8.0-jdk16.jar aspose-pdf-22.9.jar 2、pom.xml配置 <dependency><groupId>com.aspose</groupId><artifactId>aspose-pdf</artifactId><versi…...
网络原理 - 6
目录 4. 滑动窗口 滑动窗口出现丢包 情况一:数据报已经抵达,ACK 被丢了编辑 情况二:数据报直接就丢了 5. 流量控制 完! 4. 滑动窗口 这个滑动窗口是 TCP 中非常有特点的机制。 我们知道,TCP 是通过确认应答&…...
【Linux网络】构建类似XShell功能的TCP服务器
📢博客主页:https://blog.csdn.net/2301_779549673 📢博客仓库:https://gitee.com/JohnKingW/linux_test/tree/master/lesson 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正! &…...
Spring AI - Redis缓存对话
先看效果 对话过程被缓存到了Redis 中。 原理 在上一节我们快速入门了SpringAI,具体文章请查看:快速入门Spring AI 创建 ChatClient 的代码如下: this.chatClient ChatClient.builder(chatModel).defaultSystem(DEFAULT_PROMPT).defaultAd…...
rk3588 驱动开发(二)第四章嵌入式 Linux LED 驱动开发实验
4.1 Linux 下 LED 灯驱动原理 Linux 下的任何外设驱动,最终都是要配置相应的硬件寄存器。所以本章的 LED 灯驱动 最终也是对 RK3588 的 IO 口进行配置,与裸机实验不同的是,在 Linux 下编写驱动要符合 Linux 的驱动框架。开发板上的 LED 连接…...
第49讲:AI驱动的农业碳汇估算与生态价值评估 —— 打造更“绿”的智慧农业未来
目录 🌍 一、农业碳汇:我们为什么要关心它? 🤖 二、AI是如何介入农业碳汇评估的? 🛠 三、案例实战:AI估算区域农田碳汇储量 📍 场景设定: 📊 数据来源: 🔁 处理流程: 📈 四、生态价值评估:从碳储量到生态效益 🧭 五、平台与工具推荐 💬 六、…...
springmvc入门案例
目录 前言 springmvc概述 springmvc入门案例(使用配置类替代原本的web.xml) 第一步、创建一个web工程 第二步、引入相应的依赖(servlet-api、spring-webmvc、) 第三步、编写 SpringMVC配置类,并开启包扫描功能 第四步、编写…...
Node.js学习
概述 Node.js 是一个基于 Chrome V8 引擎 的 JavaScript 运行时环境,允许在服务器端运行 JavaScript 代码。它采用事件驱动和非阻塞 I/O 模型,适合构建高性能、可扩展的网络应用,尤其擅长处理实时应用和大规模数据密集型场景 背景 JavaScri…...
SQL注入漏洞中会使用到的函数
目录 一、信息获取函数 1. 通用函数 2. 元数据查询(INFORMATION_SCHEMA) 二、字符串操作函数 1. 字符串连接 2. 字符串截取 3. 编码/解码 三、报错注入专用函数 1. MySQL 2. SQL Server 3. PostgreSQL 四、时间盲注函数 1. 通用延迟 2. 计…...
MIT IDSS深度解析:跨学科融合与系统科学实践
麻省理工学院的IDSS(Institute for Data, Systems, and Society, IDSS)是一个致力于通过先进分析方法推动教育与研究的前沿机构。它将工程学、信息科学和数据科学的方法与社会科学的分析方法相结合,以应对复杂的社会挑战。 MIT IDSS 建立在统计学、计算机科学和特定应用领域…...
重塑智慧出行新生态,德赛西威全新战略愿景发布
4月22日,上海车展开幕前夕,德赛西威以“智新境,向远大”为主题,正式对外发布全新发展战略及使命、愿景;同时,代表未来AI出行趋势的智慧出行解决方案Smart Solution 3.0重磅亮相。 一、把握变革节点 创领产…...
全面解析 classification_report:评估分类模型性能的利器
解读 classification_report 的使用:评估分类模型性能的关键工具 在机器学习中,分类任务是最常见的应用场景之一。无论是垃圾邮件过滤、图像识别还是情感分析,分类模型的性能评估都是至关重要的一步。而 classification_report 是 Scikit-le…...
Qt案例 使用QFtpServerLib开源库实现Qt软件搭建FTP服务器,使用QFTP模块访问FTP服务器
本以为搭建和访问FTP服务器的功能已经是被淘汰的技术了,只会在学习新技术的时候才会了解学习学习,WinFrom版本,和windows Api版本访问FTP服务器的功能示例也都写过。没想到这次会在项目中再次遇到, 这里记录下使用Qt开源库QFtpSer…...
图像后处理记录
图像后处理记录 ocr后处理记录 opencv裁剪 编译命令 cmake -S . -B build-x64 -DBUILD_LIST"core,imgproc,imgcodecs,highgui" -DBUILD_SHARED_LIBSOFF -DBUILD_opencv_appsOFF -DBUILD_opencv_jsOFF -DBUILD_ANDROID_PROJECTSOFF -DBUILD_ANDROID_EXAMPLESOFF -…...
解决element中的el-anchor链接被作为路由跳转导致页面404
解决element中的el-anchor链接被作为路由跳转导致页面404 问题: 在使用elementPlus时,el-anchor-link中的href被识别为路由进行跳转,导致不能正常跳转到锚点,且页面显示404。 解决:自定义方法解决 <!--添加hand…...
Mapreduce中maven打包
MapReduce是一个分布式运算程序的编程框架,是用户开发“基于Hadoop的数据分析应用”的核心框架。 MapReduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序(例如:jar包),并发运行在…...
C++初阶——string的使用(下)
C初阶——string的使用(下) 一、string类对象的容量操作 对于string的容量操作,我们可以通过顺序表来理解,顺序表是通过动态数组来实现的,在数据结构专栏的第一篇就是顺序表的详细讲解,链接如下ÿ…...
AIGC vs 人类创作者:是竞争还是协作?
AIGC vs 人类创作者:是竞争还是协作? 随着人工智能技术的飞速发展,特别是生成式AI(AIGC, AI-Generated Content)的崛起,越来越多的领域开始出现AI的身影。从文本创作、图像生成到音乐制作,AIGC…...