当前位置: 首页 > news >正文

嵌入式音视频开发(一)ffmpeg框架及内核解析

系列文章目录

嵌入式音视频开发(零)移植ffmpeg及推流测试
嵌入式音视频开发(一)ffmpeg框架及内核解析


文章目录

  • 系列文章目录
  • 前言
  • 一、ffmpeg的内核
    • 1.1 框架解析
    • 1.2 内核解析
    • 1.3 FFmpeg内部数据流
      • 1.3.1 典型的解码流程
      • 1.3.2 典型的编码与推流流程
      • 1.3.3 典型的滤镜处理流程
  • 二、常用命令行工具及语法
    • 2.1 基本语法
    • 2.2 视频/音频格式转换
    • 2.3 视频编辑
    • 2.3 音频处理
    • 2.4 录屏与推流


前言

  前节简单介绍了ffmpeg,本节进行FFmpeg的整体架构和内核解读,以及常用命令行的使用。

一、ffmpeg的内核

1.1 框架解析

在这里插入图片描述
  从图像中,我们可以看到FFmpeg 主要由以下核心库组成,每个库负责不同的功能:

  • libavformat —— 负责解析和封装多媒体文件(如 MP4、FLV、MKV)。
  • libavcodec —— 负责音视频编解码(支持 H.264、AAC、MP3 等)。
  • libavfilter —— 提供音视频滤镜功能(如添加水印、调整亮度)。

  除此之外还有附件库:

  • libavutil —— 提供通用工具函数(如内存管理、日志处理)。
  • libswscale —— 处理视频像素格式转换和缩放(如 RGB 转 YUV)。
  • libswresample —— 处理音频格式转换(如 44.1kHz 到 48kHz)。

1.2 内核解析

  FFmpeg 的底层由 C 语言实现,核心包含多个关键部分,如下图所示:
在这里插入图片描述

(1)AVFormatContext:利用封装格式处理

  • 创建输出格式上下文
    • avformat_alloc_output_context2() 初始化一个输出格式上下文
  • 文件 I/O:支持 avio_read()、avio_write() 操作
  • 流管理:音视频数据流以 AVStream 形式存在
  • 封装/解封装器:
    • avformat_find_stream_info() 解析格式
    • av_read_frame() 读取数据
    • av_write_frame() 写入数据

(2) AVCodecContext:音视频编解码

  • 编码器/解码器注册
    • avcodec_register_all() 负责注册所有编解码器
  • 帧处理
    • avcodec_send_packet() 发送数据包
    • avcodec_receive_frame() 获取解码数据
  • 优化
    • 采用 SIMD 指令集加速(x86 SSE、ARM NEON),内部使用 Threading API 进行多线程优化

(3) AVFilterContext :构建滤镜链

  • 创建和配置滤镜链
    • avfilter_graph_create_filter() 创建滤镜链
    • avfilter_graph_parse_ptr() 解析滤镜链字符串,并添加到滤镜图中
  • 编辑滤镜链
    • av_buffersrc_add_frame() 将数据帧添加到滤镜图的输入端。
    • av_buffersink_get_frame() 从滤镜图的输出端获取处理后的数据帧。

(4) libswscale:图像处理

  • 图像缩放
    • sws_getContext() 创建缩放上下文
    • sws_scale() 执行缩放
  • 颜色格式转换(如RGB->YUV)
    • swsContext() 色彩转换上下文
    • sws_getContext() 颜色空间转换
色彩格式说明
AV_PIX_FMT_YUV420PYUV 4:2:0,常见于 H.264 编码
AV_PIX_FMT_YUYV422YUV 4:2:2,部分摄像头格式
AV_PIX_FMT_RGB24每像素 24 位 RGB
AV_PIX_FMT_BGR24每像素 24 位 BGR
AV_PIX_FMT_NV12现代 GPU 常用的 YUV 4:2:0

(5) libswresample:音频格式转换

  • 采样率转换、通道数调整
    • swr_alloc_set_opts()(创建转换上下文)
    • swr_convert()(执行转换)

(6) libavutil:通用工具库,如:数据类型转换、时间基准处理(AVRational)、日志管理、哈希计算(MD5、SHA)

1.3 FFmpeg内部数据流

1.3.1 典型的解码流程

avformat_open_input()   // 打开媒体文件
avformat_find_stream_info()  // 解析流信息
avcodec_find_decoder()   // 查找解码器
avcodec_alloc_context3() // 分配解码上下文
avcodec_open2()  // 打开解码器
while (av_read_frame()) {avcodec_send_packet() // 送入解码器avcodec_receive_frame() // 获取解码后数据
}

1.3.2 典型的编码与推流流程

avformat_alloc_output_context2()  // 创建输出格式上下文
avcodec_find_encoder()  // 查找编码器
avcodec_alloc_context3()  // 分配编码上下文
avcodec_open2()  // 打开编码器
while (获取原始帧) {avcodec_send_frame()  // 送入编码器avcodec_receive_packet()  // 获取压缩数据av_interleaved_write_frame()  // 推流
}

1.3.3 典型的滤镜处理流程

avfilter_graph_alloc()  // 创建滤镜图
avfilter_graph_parse_ptr()  // 解析滤镜描述
avfilter_graph_config()  // 配置滤镜
while (处理帧) {av_buffersrc_add_frame()  // 送入滤镜av_buffersink_get_frame()  // 获取输出
}

二、常用命令行工具及语法

2.1 基本语法

ffmpeg <global-options> <input-options> -i <input> <output-options> <output>  
  • 全局参数(global-options):日志输出,文件覆盖等全局选项.
  • 输入文件参数(input-options):读取文件的输入选项
  • 输出文件参数(output-options):转换(编解码器,质量等)或过滤或流映射

  常用高频命令行参数如下所示:

参数说明
-c指定编码器
-c copy直接复制,不经过重新编码
-c:v指定视频编码器
-c:a指定音频编码器
-i指定输入文件
-an去除音频流
-vn去除视频流
-preset指定输出的视频质量,会影响文件的生成速度,有以下几个可用的值 ultrafast, superfast, veryfast, faster, fast, medium, slow, slower, veryslow
-y不经过确认,输出时直接覆盖同名文件

2.2 视频/音频格式转换

格式转换

// 将 input.mp4 转换为 output.avi(自动检测编解码器)
ffmpeg -i input.mp4 output.avi// 将 MP3 转换为 WAV
ffmpeg -i input.mp3 output.wav

指定编码格式

// 使用 H.264 编码 和 AAC 音频编码 进行转换
ffmpeg -i input.mp4 -c:v libx264 -c:a aac output.mp4

2.3 视频编辑

裁剪视频

// 截取区间(截取 10-30 秒)
ffmpeg -i input.mp4 -ss 00:00:10 -to 00:00:30 -c copy output.mp4
-ss:起始时间(秒或 hh:mm:ss)
-to:结束时间// 按时长裁剪(从 10 秒处开始,截取 20 秒)
ffmpeg -i input.mp4 -ss 10 -t 20 -c copy output.mp4
-t:截取的持续时间// 裁剪视频画面(区域裁剪)
ffmpeg -i input.mp4 -vf "crop=640:480:100:50" output.mp4
- crop=width:height:x:y-(640, 480):裁剪后的宽高-(100, 50):裁剪起始位置(左上角坐标)

视频合并

// 直接合并多个相同格式的视频
ffmpeg -i "concat:input1.mp4|input2.mp4" -c copy output.mp4// 不同格式视频合并(需要重新编码)
ffmpeg -i input1.mp4 -i input2.mp4 -filter_complex "[0:v:0][0:a:0][1:v:0][1:a:0]concat=n=2:v=1:a=1[outv][outa]" /-map "[outv]" -map "[outa]" output.mp4
- concat=n=2:v=1:a=1:合并 2 个视频,带视频流 v=1 和音频流 a=1

2.3 音频处理

提取音频

ffmpeg -i input.mp4 -q:a 0 -map a output.mp3

替换视频的音频

ffmpeg -i input.mp4 -i new_audio.mp3 -c:v copy -c:a aac -strict experimental output.mp4

调整音量

ffmpeg -i input.mp3 -af "volume=2.0" output.mp3- volume=2.0:音量变为原来的 2

2.4 录屏与推流

录屏

ffmpeg -f gdigrab -framerate 30 -i desktop output.mp4

录制摄像头

ffmpeg -f v4l2 -i /dev/video0 output.mp4- /dev/video0:摄像头设备

直播推流(RTMP)

ffmpeg -re -i input.mp4 -c:v libx264 -b:v 1000k -f flv rtmp://live_url- rtmp://live_url:推流服务器地址

免责声明:本文参考了网上公开的部分资料,仅供学习参考使用,若有侵权或勘误请联系笔者

相关文章:

嵌入式音视频开发(一)ffmpeg框架及内核解析

系列文章目录 嵌入式音视频开发&#xff08;零&#xff09;移植ffmpeg及推流测试 嵌入式音视频开发&#xff08;一&#xff09;ffmpeg框架及内核解析 文章目录 系列文章目录前言一、ffmpeg的内核1.1 框架解析1.2 内核解析1.3 FFmpeg内部数据流1.3.1 典型的解码流程1.3.2 典型的…...

MFC线程安全案例

作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 目录 一、项目解析 二…...

spring cloud和spring boot的区别

Spring Cloud和Spring Boot在Java开发领域中都是非常重要的框架&#xff0c;但它们在目标、用途和实现方式上存在明显的区别。以下是对两者区别的详细解析&#xff1a; 1. 含义与定位 Spring Boot&#xff1a; 是一个快速开发框架&#xff0c;它简化了Spring应用的初始搭建以…...

探索后端开发中的异步API:基于Resilience4j与Reactive Programming的高性能设计

引言 随着微服务架构的普及&#xff0c;后端系统面临的挑战愈发严峻&#xff0c;尤其是在高并发和高可用性方面。传统的同步调用模式虽然简单&#xff0c;但在处理大量并发请求时可能会成为瓶颈。为了应对这一问题&#xff0c;异步编程逐渐成为后端开发的热门话题。 在本文中…...

JDK 17 和 JDK 21 在垃圾回收器(GC)上有什么优化?如何调整 GC 算法以提升应用性能?

JDK 17 和 JDK 21 在垃圾回收器&#xff08;GC&#xff09;上有什么优化&#xff1f;如何调整 GC 算法以提升应用性能&#xff1f; 本文将从 JDK 17 与 JDK 21 的垃圾回收改进出发&#xff0c;结合代码示例解析优化方案&#xff0c;并提供实际项目中的调优策略&#xff0c;帮助…...

两个角度理解「交叉熵损失函数」

目录 前言一、交叉熵 角度1、计算机基础&#xff08;1&#xff09;编码&#xff08;2&#xff09;数据分布 2、熵 相关2.1 信息量2.2 信息熵2.3 相对熵2.4 最小化「相对熵」还是「交叉熵」 3、公式推导3.1 信息量3.2 信息熵3.3 相对熵 二、极大似然估计 角度1、似然函数1.1 二次…...

深挖vue3基本原理之一 —— 响应式系统(Reactivity System)

响应式系统&#xff08;Reactivity System&#xff09; 1.1 基于 Proxy 的响应式代理 在 Vue 3 中&#xff0c;响应式系统的核心是使用 ES6 的 Proxy 来替代 Vue 2 里的 Object.defineProperty 方法&#xff0c;以此实现更加全面和强大的响应式追踪功能。下面我们来详细剖析这…...

解锁Rust:融合多语言特性的编程利器

如果你曾为理解Rust的特性或它们之间的协同工作原理而苦恼,那么这篇文章正是为你准备的。 Rust拥有许多令人惊叹的特性,但这些特性并非Rust所独有。实际上,Rust巧妙地借鉴了众多其他语言的优秀特性,并将它们融合成了一个完美的整体。深入了解Rust这些重要特性的来源以及它是…...

AI编程01-生成前/后端接口对表-豆包(或Deepseek+WPS的AI

前言: 做过全栈的工程师知道,如果一个APP的项目分别是前端/后端两个团队开发的话,那么原型设计之后,通过接口文档进行开发对接是非常必要的。 传统的方法是,大家一起定义一个接口文档,然后,前端和后端的工程师进行为何,现在AI的时代,是不是通过AI能协助呢,显然可以…...

[AUTOSAR通信] - PDUR模块解读

点击订阅专栏不迷路 文章目录 一、 PDUR模块概述二、功能描述2.1 发送路由功能2.2 接收路由功能2.3 网关路由功能2.4 路由控制功能 三、配置項介紹3.1. PduRBswModules3.2. PduRGeneral3.3. PduRRoutingTables3.4. PduRRoutingPath3.5. PduRSrcPdu3.6. PduRDestPdu 四、总结 &g…...

伺服报警的含义

前言&#xff1a; 大家好&#xff0c;我是上位机马工&#xff0c;硕士毕业4年年入40万&#xff0c;目前在一家自动化公司担任软件经理&#xff0c;从事C#上位机软件开发8年以上&#xff01;我们在开发C#的运动控制程序的时候&#xff0c;一个必要的步骤就是设置伺服报警信号的…...

物联网(IoT)如何与人工智能(AI)的结合

物联网&#xff08;IoT&#xff09;与人工智能&#xff08;AI&#xff09;的结合是当前技术发展的重要趋势&#xff0c;通常被称为 AIoT&#xff08;人工智能物联网&#xff09;。这种结合通过将AI的计算能力和数据分析能力与物联网的海量设备连接能力相结合&#xff0c;实现了…...

有哪些PHP开源框架属于是“高开疯走”的?

“高开疯走”是一个网络流行语或者谐音梗。可能是指一开始起点很高&#xff08;高开&#xff09;&#xff0c;然后发展迅速或者变得非常牛&#xff08;疯走&#xff09;。 在PHP生态中&#xff0c;一些框架面对市场的风起云涌&#xff0c;能持续保持高质量发展&#xff0c;切实…...

本地部署DeepSeek摆脱服务器繁忙

由于图片和格式解析问题&#xff0c;可前往 阅读原文 最近DeepSeek简直太火了&#xff0c;频频霸榜热搜打破春节的平静&#xff0c;大模型直接开源让全球科技圈都为之震撼&#xff01;再次证明了中国AI的换道超车与崛起 DeepSeek已经成了全民ai&#xff0c;使用量也迅速上去了…...

Miniforge —— 轻量化的 conda 解决方案

引言 在日常使用中&#xff0c;我们常常使用 Anaconda 或 Miniconda 来管理 Python 环境和包。但由于 Anaconda/Miniconda 属于商业产品&#xff0c;当企业规模超过一定人数时就会涉及付费问题。相比之下&#xff0c;Miniforge 是由社区主导维护的一个完全免费的替代方案&…...

GO语言基础知识

一、引言 在当今快速发展的软件开发领域&#xff0c;Go语言&#xff08;又称Golang&#xff09;凭借其简洁的语法、强大的并发支持和高效的性能&#xff0c;逐渐成为许多开发者的首选编程语言之一。Go语言由Google团队开发&#xff0c;自2009年发布以来&#xff0c;已经在云原…...

Electron 全面解析:跨平台桌面应用开发指南

引言 在当今多平台并存的数字时代&#xff0c;如何高效开发跨平台桌面应用成为开发者面临的重要挑战。Electron作为GitHub开源的跨平台框架&#xff0c;凭借其独特的Web技术融合能力&#xff0c;已成为构建桌面应用的热门选择。本文将深入探讨Electron的核心原理、开发实践及未…...

git 克隆指定 tag 的项目

git 克隆指定 tag 的项目 一、克隆指定tag的项目二、验证克隆结果 一、克隆指定tag的项目 以 tinyxml2项目 为例说明&#xff1a; git clone --branch V10.0.0 https://github.com/leethomason/tinyxml2.git解释&#xff1a; git clone&#xff1a;这是克隆一个远程仓库的命…...

pytorch笔记:mm VS bmm

1 bmm (batch matrix multiplication) 批量矩阵乘法&#xff0c;用于同时处理多个矩阵的乘法bmm 的输入是两个 3D 张量&#xff08;batch of matrices&#xff09;&#xff0c;形状分别为 (batch_size, n, m) 和 (batch_size, m, p)bmm 输出的形状是 (batch_size, n, p) 2 mm…...

《qt open3d中添加最远点采样》

qt open3d中添加最远点采样 效果展示二、流程三、代码效果展示 二、流程 创建动作,链接到槽函数,并把动作放置菜单栏 参照前文 三、代码 1、槽函数实现 void on_actionFilterFarthestDownSample_triggered();void MainWindow::on_...

自然语言处理NLP入门 -- 第二节预处理文本数据

在自然语言处理&#xff08;NLP&#xff09;中&#xff0c;数据的质量直接影响模型的表现。文本预处理的目标是清理和标准化文本数据&#xff0c;使其适合机器学习或深度学习模型处理。本章介绍几种常见的文本预处理方法&#xff0c;并通过 Python 代码进行示例。 2.1 文本清理…...

depcheck检查node.js项目中未使用和缺失依赖的工具

depcheck检查node.js项目中未使用和缺失依赖的工具 一、安装二、使用方法 depcheck 是一个用于检查 Node.js 项目中未使用依赖项和缺失依赖项的工具。以下为你详细介绍它的相关信息、使用方法和作用。 主要作用: 1.发现未使用的依赖 在项目开发过程中&#xff0c;我们可能会安…...

正则表达式(竞赛篇)

为了更深入了解正则表达式&#xff0c;我们需要首先学习与正则表达式有关的类以及方法。如Pattern和Matcher类&#xff0c;以及部分字符串方法。 我们这里先将简单的字符串方法(String类)进行讲解 在Java中&#xff0c;String类提供了许多用于字符串操作的方法&#xff0c;其中…...

国科大 2024-2025秋 大数据分析课程期末复习重点

教师&#xff1a;靳小龙、刘盛华 博主在做期末复习时&#xff0c;发现这门课的资料少之又少&#xff0c;搜遍全网只能找到几份作业答案。特此将本学期老师画的重点分享给学弟学妹们&#xff0c;希望对大家的复习有所帮助。 靳小龙老师部分&#xff1a; 大数据与大数据分析简…...

使用Python爬虫获取淘宝Custom API接口数据

一、引言 淘宝作为中国最大的电商平台之一&#xff0c;其提供的API接口为开发者提供了丰富的数据访问能力。通过淘宝的Custom API接口&#xff0c;开发者可以获取商品详情、店铺信息、订单数据等多种资源。这些数据对于电商运营、市场分析、竞品监控等场景具有极高的价值。本文…...

人生的转折点反而迷失了方向

就像我老婆说的&#xff0c;我是抽空结了一个婚。今天是上班的第三天&#xff0c;不知道是出于何种原因&#xff0c;自己反而陷入了深深的困境&#xff0c;没有了斗志&#xff0c;原因也找不出来&#xff0c;白天在公司没有很大量的产出&#xff0c;晚上回去是想学一学&#xf…...

Web应用项目开发 ——Spring Boot邮件发送

一.邮件发送介绍 邮件发送是一个非常常见的功能&#xff0c;注册时的身份认证、重要通知发送等都会用到邮件发送。在现代的Web应用程序中&#xff0c;邮件发送功能是非常常见且重要的一部分&#xff0c;Spring Boot框架提供了简单且强大的方式来实现邮件发送功能。Spring中提供…...

mit6.824-lab1

1.任务及要求 https://pdos.csail.mit.edu/6.824/labs/lab-mr.html 2 Coordinator 与 Worker 的设计分析 2.1 Coordinator&#xff08;协调器&#xff09;的核心职责 协调器是 MapReduce 系统的核心控制节点&#xff0c;负责全局任务调度与状态管理&#xff0c;具体功能如下…...

Vision Transformer:打破CNN垄断,全局注意力机制重塑计算机视觉范式

目录 引言 一、ViT模型的起源和历史 二、什么是ViT&#xff1f; 图像处理流程 图像切分 展平与线性映射 位置编码 Transformer编码器 分类头&#xff08;Classification Head&#xff09; 自注意力机制 注意力图 三、Coovally AI模型训练与应用平台 四、ViT与图像…...

linux查看所有程序占用的本地端口

sudo ss -tulwnp ss是Socket Statistics的缩写&#xff0c;用来替代旧的netstat工具&#xff0c;功能更强大&#xff0c;执行更快。它用于查看系统的网络连接情况&#xff0c;包括TCP、UDP等协议的信息。 查阅ss的帮助文档&#xff08;man ss&#xff09;&#xff0c;发现选项…...

java后端开发day15--字符串(一)

&#xff08;以下内容全部来自上述课程&#xff09; 1.API &#xff08;Application Programming Interface 应用程序编程接口&#xff09; 1.简单理解 简单理解&#xff1a;API就是别人已经写好的东西&#xff0c;我们不需要自己编写&#xff0c;直接使用即可。 Java API&…...

C++STL容器之map的使用及复现

map 1. 关联式容器 vector、list、deque、forward_list(C11) 等STL容器&#xff0c;其底层为线性序列的数据结构&#xff0c;里面存储的是元素本身&#xff0c;这样的容器被统称为序列式容器。而 map、set 是一种关联式容器&#xff0c;关联式容器也是用来存储数据的&#xf…...

lvs的DR模式

基于Linux的负载均衡集群软件 LVS 全称为Linux Virtual Server,是一款开源的四层(传输层)负载均衡软件 Nginx 支持四层和七层(应用层)负载均衡 HAProxy 和Nginx一样,也可同时支持四层和七层(应用层)负载均衡 基于Linux的高可用集群软件 Keepalived Keepalived是Linux…...

FlutterWeb实战:07-自动化部署

Flutter Web 开发打包后&#xff0c;可以手动发布到服务器上&#xff0c;通过 nginx 来托管静态页面。本文将介绍如何将这一过程自动化。 整体思路 使用脚本自动化构建&#xff0c;然后使用 Docker 打包成镜像&#xff0c;最后部署在服务器上。 自动化构建 这里使用 GitLab-…...

剑指 Offer II 020. 回文子字符串的个数

comments: true edit_url: https://github.com/doocs/leetcode/edit/main/lcof2/%E5%89%91%E6%8C%87%20Offer%20II%20020.%20%E5%9B%9E%E6%96%87%E5%AD%90%E5%AD%97%E7%AC%A6%E4%B8%B2%E7%9A%84%E4%B8%AA%E6%95%B0/README.md 剑指 Offer II 020. 回文子字符串的个数 题目描述 …...

vue中附件下载及打印功能

1.附件dom 注&#xff1a;fileList是由后台返回的附件数组&#xff0c;数组中包含附件名称fileName,附件地址url&#xff0c;附件id等信息 <el-form-item label"附件" style"width: 100% !important;" v-if"modelTypeborrowDetail"><d…...

Python(十九)实现各大跨境船公司物流查询数据处理优化

一、前言 之前已经实现了常用 跨境物流船司 基础信息查询功能&#xff0c;如下所示 实现各大跨境船公司[COSCO/ZIM/MSK/MSC/ONE/PIL]的物流信息查询&#xff1a;https://blog.csdn.net/Makasa/article/details/145484999?spm1001.2014.3001.5501 然后本章在其基础上做了一些…...

android 安装第三方apk自动赋予运行时权限

摘要&#xff1a;行业机使用场景点击运行时权限很麻烦&#xff0c;而随着android的演进&#xff0c;对于权限的管控越发严格。故本文通过对系统的修改实现第三方app在运行时直接获取全部权限。 通过属性ro.perms.force_grant控制功能开关。 Index: frameworks/base/services/…...

java8、9新特性

JAVA8 Lambda 表达式 (parameters) -> expression 或 (parameters) ->{ statements; } 提供了一种更为简洁的语法&#xff0c;尤其适用于函数式接口。相比于传统的匿名内部类&#xff0c;Lambda 表达式使得代码更为紧凑&#xff0c;减少了样板代码的编写。 它允许将函…...

程序诗篇里的灵动笔触:指针绘就数据的梦幻蓝图<9>

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。 这一节是对之前内容的修整 目录 一、传值调用和传址调用二、数组名的理解三、指针访问数组四、结尾 一…...

Java网络编程入门

网络编程是指通过计算机网络进行数据传输和通信的过程。在Java中&#xff0c;网络编程提供了一套强大的API&#xff0c;使得开发者能够轻松地创建网络应用程序。本文将介绍Java网络编程的基本概念和一些常用的类。 1.网络编程的基本概念 在网络编程中&#xff0c;我们通常需要…...

2.4 构建模块化应用

第4章&#xff1a;构建模块化应用 模块化应用是 JDK 9 的核心特性之一&#xff0c;通过模块化系统&#xff08;Project Jigsaw&#xff09;实现代码的强封装和显式依赖管理。本章详细讲解如何从零构建一个模块化应用&#xff0c;包括模块定义、编译、打包、运行及调试。 4.1 模…...

14.1 Auto-GPT 项目定位与价值解读:揭开自主智能体的神秘面纱

Auto-GPT 项目定位与价值解读:揭开自主智能体的神秘面纱 关键词:Auto-GPT 核心机制、自主任务分解、LangChain 智能体、持续自我优化、AGI 实践路径 一、为什么 Auto-GPT 能引爆技术圈? 1.1 从工具到员工的范式转移 维度传统AI系统Auto-GPT 智能体输入方式精确指令(“翻译…...

【Elasticsearch】分析器的构成

在Elasticsearch中&#xff0c;分析器&#xff08;Analyzer&#xff09;是一个处理文本数据的管道&#xff0c;它将输入的文本转换为一系列词元&#xff08;tokens&#xff09;&#xff0c;并可以对这些词元进行进一步的处理和规范化。分析器由以下三个主要组件构成&#xff1a…...

2025 年前端开发现状分析:卷疯了还是卷麻了?

一、前端现状&#xff1a;框架狂飙&#xff0c;开发者崩溃 如果你是个前端开发者&#xff0c;那么你大概率经历过这些场景&#xff1a; 早上打开 CSDN&#xff08;或者掘金&#xff0c;随便&#xff09;&#xff0c;发现又有新框架发布了&#xff0c;名字可能是 VueXNext.js 之…...

单例模式详解(Java)

单例模式详解(Java) 一、引言 1.1 概述单例模式的基本概念和重要性 单例模式是一种常用的软件设计模式,它确保一个类在整个应用程序中只有一个实例,并提供一个全局访问点来访问这个唯一实例。这种模式在资源管理、配置设置和日志记录等方面非常有用,因为它们通常只需要…...

后端面试题

以下是一些常见的后端面试题: 一、通用基础 请简述HTTP协议的工作原理。 答案: HTTP是基于请求 - 响应模型的协议。客户端(通常是浏览器)向服务器发送一个HTTP请求,请求包含请求行(包含请求方法,如GET、POST等、请求的URL和HTTP版本)、请求头(包含诸如浏览器类型、接…...

深入理解Linux网络随笔(一):内核是如何接收网络包的(上篇)

深入理解Linux网络随笔&#xff08;一&#xff09;&#xff1a;内核是如何接收网络包的&#xff08;上篇&#xff09; 1、TCP/IP模型概述 从Linux视角看&#xff0c;TCP/IP网络分层模型包括用户空间和内核空间。用户空间&#xff08;应用层&#xff09;负责HTTP、FTP等协议的…...

SQL-leetcode—1393. 股票的资本损益

1393. 股票的资本损益 Stocks 表&#xff1a; ---------------------- | Column Name | Type | ---------------------- | stock_name | varchar | | operation | enum | | operation_day | int | | price | int | ---------------------- (stock_name, operation_day) 是这张…...

热更图片方案

项目平常需要对线上一些图片资源修正&#xff0c;所以需要热更图片功能。 远端入口新增字段配json文件 {"1.1.22030303":{"sprite":{"assets/ui/common/images/acient_gold.png" : "https://aaaa.png","assets/ui/common/image…...