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

剥开 MP4 的 千层 “数字洋葱”:从外到内拆解通用媒体容器的核心

在当今数字化时代,MP4 格式随处可见,无论是在线视频、手机拍摄的短片,还是从各种渠道获取的音频视频文件,MP4 都占据着主流地位。它就像一个万能的 “数字媒体集装箱”,高效地整合和传输着各种视听内容。接下来,让我们深入探索 MP4 封装格式的奇妙世界。

一、MP4 封装格式初印象

MP4,全称为 MPEG-4 Part 14,出⾃MPEG-4标准第14部分,是一种基于 MPEG-4 标准的多媒体容器格式。简单来说,它是一种用于存储音频、视频、字幕和图像等多种媒体数据的文件格式。就好比一个大行李箱,能把不同的物品(各类媒体数据)有条不紊地装在一起,方便携带和使用。MP4 格式具有很强的适应性,能在多种设备上播放,从电脑、手机到智能电视,都对它 “友好相待”,这也是它广受欢迎的重要原因之一。

二、MP4 的核心结构解析

MP4 文件的结构就像一座精心建造的大厦,由多个重要部分组成,其中最关键的是 “Box”(盒子)。可以把 MP4 文件想象成一个装满盒子的大仓库,每个盒子都有特定的用途和规则。每个box分为Header和Data。其中Header部分包含了box的类型和⼤⼩,Data包含子box或者数据,box可以嵌套⼦box。

(一)File Type Box(ftyp)

FileType Box 就像是 MP4 文件的 “身份证”,它存储了文件的基本信息,如使用的 MPEG-4 规范版本、兼容的品牌等。这个盒子是 MP4 文件的起始部分,不可或缺。通过它,播放器能快速识别文件是否符合 MP4 格式规范,以及该文件与哪些设备或软件兼容。例如,当你在不同设备上播放同一个 MP4 视频时,设备首先会读取 ftyp 盒子里的信息,判断能否顺利播放该视频。

(二)Media Data Box(mdat)

Media Data Box 是真正存放音频和视频数据的 “宝库”。如果把 MP4 文件比作一个装满宝藏的箱子,mdat 盒子就是里面最珍贵的宝物。它包含了经过编码压缩后的视频帧和音频样本,是我们最终看到的画面和听到的声音的来源。不同的编码格式,如 H.264、H.265 用于视频,AAC 用于音频,它们的数据都被存储在这个盒子里。

(三)Movie Box(moov)

Movie Box 是 MP4 文件的核心 “大脑”,它包含了描述整个视频和音频内容的元数据,包含本⽂件中所有媒体数据的宏观描述信息以及每路媒体轨道的具体信息。这就好比是一份详细的项目计划书,涵盖了视频的时长、帧率、分辨率、音频的采样率、声道数等关键信息。此外,moov 盒子还包含了时间和空间上如何同步音视频数据的信息,确保我们在观看视频时,声音和画面能够完美匹配,不会出现声画不同步的情况。我们下文所进一步讲解的都是moov中的子box。

三、moov 的 “五脏六腑”

moov 容器并非是一个混沌的整体,而是由多个有序的子结构(子原子)组成,这些子结构各司其职,共同构建起视频播放的 “指挥中心”。

(一)mvhd:视频的 “总导演”

mvhd(Movie Header Box)是 moov 容器中的 “总导演”,它掌控着整个视频文件的全局信息。在 mvhd 中,我们能找到视频的创建时间、修改时间、时间尺度(time scale)等关键参数。

时间尺度是一个非常重要的概念,它定义了时间的基本单位。例如,时间尺度为 90000,表示每一秒被划分为 90000 个时间单位。结合这个参数,播放器就能精确计算出每一帧画面应该在何时播放,从而实现视频的流畅播放。此外,mvhd 还包含了视频的时长信息,它以时间尺度为基础,告诉播放器这段视频总共持续多少个时间单位。

mvhd(Movie Header Box)作为 moov 的首个子结构,其内部结构如下:

  • 版本与标志位

    • 版本(version):占 4 字节,指示 mvhd 结构的版本(通常为 0 或 1)。若版本为 1,部分时间戳字段将扩展为 64 位。

    • 标志位(flags):占 3 字节,用于标识特殊属性。例如,标志位 0x000100 表示该视频支持预览播放。

  • 创建时间(creation_time):占 4 字节(或 64 位,版本为 1 时),记录文件创建的时间戳,以秒为单位(需结合 time_scale 换算实际时间)。

  • 修改时间(modification_time):与创建时间类似,记录文件最后一次修改的时间。

  • 时间尺度(time_scale):占 4 字节,定义时间的基本单位。如 time_scale 为 30,表示 1 秒被划分为 30 个时间单位,常用于计算帧率(若帧率为 30fps,每帧持续 1 个时间单位)。

  • 持续时间(duration):占 4 字节(或 64 位),表示视频总时长,以 time_scale 为基准单位。

  • 速率(rate):占 4 字节,默认为 1.0(正常播放速度),0.5 表示慢放,2.0 表示快进。

  • 音量(volume):占 2 字节,范围 0 - 256(0 为静音,256 为最大音量)。

(二)trak:音视频的 “轨道指挥官”

trak(Track Box)就像是铁路系统中的轨道指挥官,在 MP4 文件中,每一个 trak 对应一条音视频轨道。一个 MP4 文件通常包含至少一条视频轨道和一条音频轨道,也可能包含多条音频轨道(如多语言配音)或字幕轨道。

每个 trak 内部又包含了多个子原子,其中最重要的是 tkhd(Track Header Box)和 mdia(Media Box)。tkhd 记录了轨道的基本属性,如轨道的 ID、轨道在视频中的位置、轨道的宽度和高度(对于视频轨道)等信息。而 mdia 则进一步细化,它描述了轨道的数据格式和编码信息。

每个 trak关键子结构如下:

1. tkhd:轨道属性的 “基础档案”

  • 版本与标志位:与 mvhd 类似,定义结构版本和轨道特殊属性(如是否为隐藏轨道)。

  • 创建 / 修改时间:记录轨道创建和修改的时间戳。

  • 轨道 ID(track_ID):占 4 字节,唯一标识当前轨道(如 1 代表视频轨道,2 代表音频轨道)。

  • 图层(layer):占 2 字节,用于多层轨道叠加时的层级顺序(数值越小越靠前)。

  • 宽度与高度:对于视频轨道,存储画面的像素宽度和高度;音频轨道则为 0。

2. mdia:媒体数据的 “格式说明书”

mdia(Media Box)如同音视频的 “格式说明书”,它包含了 minf(Media Information Box)和 mdhd(Media Header Box)等子box。mdhd 主要记录与媒体相关的时间信息,比如媒体的创建时间、修改时间等。

minf 则更加关键,它详细描述了媒体数据的格式。以视频轨道为例,minf 中的 vmhd(Video Media Header Box)会说明视频的图形模式、不透明度等属性;而 dinf(Data Information Box)则指向实际存储视频数据的位置,它包含了 stbl(Sample Table Box),stbl 是一个非常核心的子结构,它记录了每一个视频帧(样本)在文件中的偏移位置、样本的时长、样本的大小等信息。播放器正是通过这些信息,能够精准地定位到每一帧视频数据,进行解码和播放。

对于音频轨道,minf 中的音频相关子原子会说明音频的采样率、声道数、样本格式等信息,同样通过 stbl 来定位音频样本在文件中的位置,确保音频能够准确播放。

mdia(Media Box)进一步拆解为多个子结构:

  • mdhd:媒体时间信息:记录媒体的创建 / 修改时间、时间尺度(可能与 mvhd 不同,用于单独控制轨道时间,要注意Time scale,我们在计算时间戳的时候都要使⽤该Time scale,对应我们流⾥⾯的AVStream->time_base)。

  • minf:媒体格式核心

    • vmhd(视频媒体头):存在于视频轨道中,包含图形模式(如 YUV 4:2:0)、不透明度等属性。

    • smhd(音频媒体头):存在于音频轨道中,定义音频混合模式、声道布局等。

    • stbl(Sample Table Box):stbl包含了媒体流每⼀个sample在⽂件中的offset,pts,duration等信息。想要播放⼀个mp4⽂件,必须根据stbl正确找到每个sample并送给解码器。详细见下文。

    • dinf(数据信息)

  • hdlr(Handler Reference Box):媒体的播放过程信息。

3. stbl:样本索引的 “精密地图”

stbl 是 trak 中最复杂的部分,它如同一个精密的导航系统,记录每个音视频样本的位置和属性:

  • stsd(Sample Description Box):存储样本的格式信息,如视频的编码格式(H.264)、音频的采样率和位深度。对于 H.264 视频,⾥⾯包含了avc1,avc1⾥⾯⼜包含了avcC,avc1包含了视频Width、Height;avcC:包含了视频编码器相关的信息,包括sps、pps等信息。对于音频,包含采样率和位深度,通道数等。

  • stts(Time to Sample Box):建立时间戳与样本的映射关系。例如,若某段视频前 10 帧每帧持续 1 个时间单位,接下来 5 帧每帧持续 2 个时间单位,stts 会记录这些变化。Time-To-Sample的table entry布局如下:

sample count:sample个数,sample duration:sample持续时间,持续时间相同的连续sample可以放到⼀个entry⾥达到节省空间的⽬的。

  • stsc(Sample to Chunk Box):将样本分组为 “数据块(Chunk)”,每个 Chunk 包含多个样本。这有助于播放器批量读取数据,提升效率。

 其table entry布局如下图所示:

First chunk:使⽤该表项的第⼀个chunk序号,Samples per chunk:使⽤该表项的chunk中包含有⼏个sample ,Sample description ID:使⽤该表项的chunk参考的stsd表项序号

  • stsz(Sample Size Box):记录每个样本的大小(字节数),方便播放器计算数据读取长度。

  • stss(Sync Sample Box) :同步sample表,存放关键帧列表,关键帧是为了⽀持随机访问。

  • stco(Chunk Offset Box):存储每个 Chunk 在文件中的偏移位置,是播放器定位数据的核心索引。若采用 64 位偏移(co64 子结构),则可支持超大文件。需要注意,这⾥stco只是指定的每个chunk在⽂件中的偏移位置,并没有给出每个sample在⽂件中的偏移。想要获得每个sample的偏移位置,需要结合 Sample Size box(stsz)和Sample-To-Chunk(stsc) 计算后取得。

上⽂提到通过stco并不能直接获取某个sample的偏移位置,下⾯举例说明如何获取某⼀个pts对应的sample在⽂件中的位置。

1.将pts转换到媒体对应的时间坐标系

2.根据stts计算某个pts对应的sample序号

3.根据stsc计算sample序号存放在哪个chunk中

4.根据stco获取对应chunk在⽂件中的偏移位置

5.根据stsz获取sample在chunk内的偏移位置并加上第4步获取的偏移,计算出sample在⽂件中的偏移

(三)udta内的meta:元数据的 “百宝箱”

meta(Metadata Box)是 moov 容器中的 “百宝箱”,它存储着一些额外的元数据信息,比如视频的版权信息、作者信息、章节信息等。虽然这些信息对于视频的基础播放不是必需的,但它们能为视频增加更多的附加值。

例如,一些视频文件的 meta 中会包含章节信息,这样用户在播放视频时,就能方便地在不同章节之间跳转;版权信息则能明确视频的归属权,保护创作者的权益。

  • ilst(iTunes 元数据):包含标题、艺术家、专辑等信息,常用于音乐视频。
  • hdlr(Handler Reference Box):指定轨道的处理方式(如 “vide” 表示视频轨道,“soun” 表示音频轨道)。

四、MP4 封装格式的优势

(一)良好的兼容性

MP4 格式具有广泛的兼容性,几乎所有的媒体播放器和移动设备都支持它。无论是在 Windows 系统的电脑上用 Windows Media Player 播放,还是在 iPhone 上用自带的视频播放器观看,MP4 文件都能轻松应对。这得益于它的标准化设计,使得各种设备和软件都能按照统一的规则解析和播放 MP4 文件,大大方便了用户在不同设备间分享和播放视频。

(二)高效的压缩与存储

MP4 格式支持多种先进的编码标准,如 H.264、H.265 视频编码和 AAC 音频编码。这些编码标准就像优秀的压缩大师,能在保证视频和音频质量的前提下,大幅减小文件的大小。比如,一部原本体积较大的高清电影,经过 H.264 编码封装成 MP4 格式后,文件大小可能会缩小到原来的几分之一,同时画面质量依然能保持较高水准,既节省了存储空间,又便于在网络上传输。

(三)丰富的媒体支持

MP4 不仅能存储视频和音频数据,还能包含字幕、章节信息、3D 信息等多种媒体元素。以在线学习视频为例,MP4 文件可以同时嵌入视频讲解、老师的声音、课程字幕,甚至还能设置章节标记,方便学习者快速定位到特定的知识点。这种丰富的媒体支持特性,让 MP4 成为一种功能强大的多媒体存储格式。

五、MP4 在实际中的应用场景

(一)在线视频平台

如今,几乎所有的主流在线视频平台,如腾讯视频、爱奇艺、YouTube 等,都将 MP4 作为主要的视频存储和播放格式。这是因为 MP4 格式在兼容性、压缩效率和媒体支持方面的优势,能满足平台对大量视频内容存储、传输和播放的需求。用户在这些平台上观看视频时,流畅的播放体验、清晰的画质和准确的声音,都离不开 MP4 格式的功劳。

(二)移动设备

我们日常使用手机拍摄的照片和视频,很多默认保存为 MP4 格式。这是因为 MP4 格式在移动设备上具有良好的兼容性和高效的存储特性。一方面,MP4 文件较小的体积能节省手机的存储空间;另一方面,无论在手机自带的相册中播放,还是分享到社交媒体上,MP4 格式都能确保视频顺利播放,让我们可以轻松记录和分享生活中的精彩瞬间。

(三)数字媒体创作

在影视制作、动画设计等数字媒体创作领域,MP4 也是常用的格式之一。制作人员可以将各种特效、音频、视频片段等整合封装成 MP4 文件,方便在不同的软件和设备上进行后期编辑、预览和展示。例如,动画工作室在制作动画短片时,各个环节生成的中间文件可能会以 MP4 格式保存,便于团队成员之间共享和协作。

六、MP4 格式的未来展望

随着技术的不断发展,MP4 格式也在持续演进。未来,它将更好地适应高清、超高清视频以及虚拟现实(VR)、增强现实(AR)等新兴媒体技术的需求。例如,在 8K 超高清视频时代,MP4 格式通过与更先进的编码技术结合,能更高效地存储和传输海量的视频数据。同时,在 VR 和 AR 领域,MP4 格式也在不断拓展,以支持 360 度全景视频、多声道音频等特殊媒体元素的封装和播放,为用户带来更加沉浸式的体验。

MP4 封装格式作为数字媒体领域的重要组成部分,凭借其独特的结构和诸多优势,在各个方面都发挥着重要作用。希望通过本文的介绍,你能对 MP4 封装格式有更深入的理解,在日常生活和工作中更好地运用它。

相关文章:

剥开 MP4 的 千层 “数字洋葱”:从外到内拆解通用媒体容器的核心

在当今数字化时代,MP4 格式随处可见,无论是在线视频、手机拍摄的短片,还是从各种渠道获取的音频视频文件,MP4 都占据着主流地位。它就像一个万能的 “数字媒体集装箱”,高效地整合和传输着各种视听内容。接下来&#x…...

设计模式(结构型)-组合模式

定义 组合模式的定义为:将对象组合成树形结构以表示 “部分 - 整体” 的层次结构,并且使得用户对单个对象和组合对象的使用具有一致性。其最关键的实现要点在于,简单对象和复合对象必须实现相同的接口,这一特性正是组合模式能够对…...

使用 IDEA + Maven 搭建传统 Spring MVC + Thymeleaf 项目的详细步骤

使用 IDEA Maven 搭建传统 Spring MVC Thymeleaf 项目 环境准备步骤 1:创建 Maven 项目步骤 2:添加依赖(pom.xml)步骤 3:配置 web.xml步骤 4:Spring 配置类(Java Config)步骤 5&am…...

「Mac畅玩AIGC与多模态19」开发篇15 - 判断节点与工具节点联动示例

一、概述 本篇在引入工具节点的基础上,进一步结合判断节点(条件分支),实现根据用户输入内容动态控制是否调用外部接口。通过构建“用户是否需要天气信息”的条件逻辑,开发人员将掌握如何在 Dify 工作流中通过条件判断…...

docker 外部能访问外网,内部不行(代理问题)

如果宿主机访问外网依赖代理(比如 http_proxy 环境变量),容器默认不会继承。需要显式传入代理: docker run -e http_proxy... -e https_proxy... ...在 docker-compose 中配置 HTTP/HTTPS 代理 version: 3 services:app:image: …...

模糊控制理论(含仿真)

本文讲解模糊控制理论、设计步骤以及案例。 1. 模糊控制原理: 模糊控制(Fuzzy Control)是一种基于模糊逻辑推理的人类经验规则实现的控制方法,适用于对系统模型不精确或难以建立精确数学模型的复杂系统。它利用“如果…那么…”&…...

《 C++ 点滴漫谈: 三十六 》lambda表达式

一、引言 在 C98 和 C03 时代,尽管 C 拥有强大的泛型编程能力和丰富的面向对象特性,但在表达局部逻辑、回调行为或一次性函数处理时,程序员却常常需要冗长的代码来定义函数对象(functor),或者使用函数指针…...

【C/C++】函数模板

🎯 C 学习笔记:函数模板(Function Template) 本文是面向 C 初学者的函数模板学习笔记,内容包括基本概念、定义与使用、实例化过程、注意事项等,附带示例代码,便于理解与复现。 📌 一…...

电赛经验分享——模块篇

1、前言 打算在这一个专栏中,分享一些本科控制题电赛期间的经验,和大家共同探讨,也希望能帮助刚刚参加电赛的同学,了解一些基本的知识。一些见解和看法可能不同或有错误,欢迎批评指正。 在本文中,主要介绍笔…...

LeetCode 热题 100 70. 爬楼梯

LeetCode 热题 100 | 70. 爬楼梯 大家好,今天我们来解决一道经典的动态规划入门题——爬楼梯。这道题在LeetCode上被标记为简单难度,要求我们计算爬到第n阶楼梯的不同方法数,每次可以爬1或2个台阶。下面我将详细讲解解题思路,并附…...

浔川AI测试版内测报告

浔川AI测试版内测报告 一、引言 本次对浔川AI测试版进行内测,旨在全面评估其功能表现与性能状况,为后续的优化升级及正式上线提供有力依据。 二、测试环境 1. 硬件环境:[Windows 10】 2. 软件环境:操作系统为【核桃编程]&#xff…...

Leetcode刷题记录31——旋转图像

题源:https://leetcode.cn/problems/rotate-image/description/?envTypestudy-plan-v2&envIdtop-100-liked 题目描述: 思路一: 💡 解题思路:分两步完成旋转 虽然“直接旋转”看起来有点抽象,但我们…...

攻防世界-php伪协议和文件包含

fileinclude 可以看到正常回显里面显示lan参数有cookie值表示为language 然后进行一个判断,如果参数不是等于英语,就加上.php,那我们就可以在前面进行注入一个参数,即flag, payload:COOKIE:languageflag …...

[C++] 小游戏 决战苍穹

大家好,各位看到这个标题,斗破苍穹什么时候改叫决战苍穹了?其实,因为版权等一系列问题,斗破苍穹正式改名为决战苍穹,这个版本主要更新内容为解决了皇冠竞技场太过影响游戏平衡,并且提高了一些装…...

项目成本管理_挣得进度ES

在项目成本管理的新实践中, 通过挣值管理(EVM) 的扩展,引入 挣得进度ES 这一概念, ES是EVM理论和实践的延伸,挣得进度理论用ES和实际时间(AT) 替代了传统EVM所使用的进度偏差测量指标SV(挣值—计划价值)。 使用这种替代方法计算…...

矩阵快速幂 快速求解递推公式

文章目录 习题790.多米诺和托米诺平铺 对于一个给定的递推公式,例如dp[i] dp[i-1] * a dp[i-2] * b,那么常用的做法,肯定是使用o(n)的时间复杂度进行线性求解,但是如果 n 10 18 n{10}^{18} n1018,那么肯定超时的,这…...

驱动开发硬核特训 · Day 28(上篇):pinctrl 子系统详解与实战分析

📅 日期:2025-05-05 📚 技术平台:嵌入式Jerry(B站) 一、引言 在嵌入式系统中,SoC 芯片的引脚通常具有多种功能,如 GPIO、UART、I2C、SPI 等。为了在不同的应用场景中灵活配置引脚功…...

20250505下载VLC for Android

20250505下载VLC for Android 2025/5/5 14:35 缘起:做Rockchip的RK3566的Android13下的跨网段PING。 酷芯的图传网段 和 softAP/以太网RJ45共享网段之间互相PING通。 图传的原厂/供应商说可以使用ffmpeg进行rtsp流的转发。 后来确认VLC for Android版本只有接受流&a…...

Jetpack Compose 响应式布局实战:BoxWithConstraints 完全指南

深入理解 Jetpack Compose 中的 BoxWithConstraints 前言 在构建现代 Android 应用时,响应式设计已成为必不可少的要求。Jetpack Compose 作为 Android 的现代 UI 工具包,提供了 BoxWithConstraints 这一强大组件,帮助我们轻松创建能够适应…...

ZYNQ笔记(十七):IP核封装与接口定义

版本:Vivado2020.2(Vitis) 任务:将“HDMI彩条显示实验”(正点原子 ZYNQ FPGA 开发视频)中所实现的 RGB2DVI 模块封装成一个 IP 核。 目录 一、介绍 (1)IP核 (2&#x…...

学习笔记msp430f5529lp

注:本文仅用于个人学习使用,记录笔记。 学习视频msp430f5529库函数入门教程 00.序言_哔哩哔哩_bilibili 向大佬致敬理工男小帅-CSDN博客 CCS环境快捷键使用 代码注释:Ctrl/ 提示/补全: CtrlShiftC 放大:Ctrl 缩小:Ctrl- 切换选择模式&…...

人工智能应用:从技术突破到生态重构的演进之路

一、人工智能的发展历程:从符号主义到通用智能探索 人工智能(AI)的发展始于20世纪中叶,其历程可划分为四个关键阶段: ​符号主义与早期探索(1950s-1970s)​​ 以逻辑推理和专家系统为核心&…...

【ZYNQ Linux移植】4-内核移植

文章目录 0 写在前面1 内核源码的文件结构2 Linux内核移植2.1 移植配置文件2.2 移植设备树2.3 创建脚本进行编译2.4 备份相关文件 3 测试4 总结5 参考资料 0 写在前面 这是一个系列博客,详细介绍如何在 ZYNQ 与 ZYNQ MP 平台上如何移植 Linux 系统。目前网络上的大部…...

代码随想录算法训练营第三十二天

LeetCode/卡码网题目: 518. 零钱兑换 II377. 组合总和 Ⅳ790. 多米诺和托米诺平铺(每日一题)57. 爬楼梯(第八期模拟笔试) 其他: 今日总结 往期打卡 背包问题特点: 滚动数组背包遍历顺序 完全背包从小到大,即基于当前物品更新过的继续更新01背包从大到…...

java CompletableFuture 异步编程工具用法1

1、测试异步调用: static void testCompletableFuture1() throws ExecutionException, InterruptedException {// 1、无返回值的异步任务。异步线程执行RunnableCompletableFuture.runAsync(() -> System.out.println("only you"));// 2、有返回值的异…...

Spring Boot 集成 Solr 的详细步骤及示例

环境准备 安装 Solr :从 Solr 官网(Welcome to Apache Solr - Apache Solr)下载并安装最新版本,然后通过命令 bin/solr start 启动 Solr 服务,使用 bin/solr create -c mycore 创建一个新的 Solr 核心。 安装 JDK &am…...

Nemotron-Research-Tool-N1 如何提升大语言模型工具使用能力?

Nemotron-Research-Tool-N1如何提升大语言模型工具使用能力? 如今,大语言模型(LLMs)发展迅猛,给它配备外部工具成为研究热点。但传统方法存在不少问题。这篇论文提出的Nemotron-Research-Tool-N1系列模型带来新突破&a…...

OpenCV进阶操作:图像直方图、直方图均衡化

文章目录 一、图像直方图二、图像直方图的作用三、使用matplotlib方法绘制直方图2.使用opencv的方法绘制直方图(划分16个小的子亮度区间)3、绘制彩色图像的直方图 四、直方图均衡化1、绘制原图的直方图2、绘制经过直方图均衡化后的图片的直方图3、自适应…...

Android控件VideoView用法

一 控件UI <VideoViewandroid:id="@+id/videoView"android:layout_width="match_parent"android:layout_height="match_parent"android:scaleType="fitCenter" /> 二 配置 <?xml version="1.0" encoding="u…...

人工智能数学基础(十)—— 图论

图论作为数学的重要分支&#xff0c;为人工智能提供了强大的建模和分析工具。无论是社交网络分析、路径规划还是数据结构设计&#xff0c;图论都发挥着不可替代的作用。今天&#xff0c;我将带领大家深入浅出地探索图论的核心概念&#xff0c;并结合 Python 实例&#xff0c;让…...

深入探索Anthropic Claude与Spring AI的融合应用

深入探索Anthropic Claude与Spring AI的融合应用 前言 在人工智能的蓬勃发展进程中&#xff0c;自然语言处理领域不断涌现出强大的模型和工具。Anthropic Claude系列基础AI模型凭借其出色的性能&#xff0c;在各种应用场景中展现出巨大潜力&#xff0c;为开发者和企业提供了丰…...

Python爬虫实战:获取优美图库各类高清图片,为用户提供设计素材

一、引言 在互联网时代,高清壁纸资源丰富多样,而优美图库作为一个提供大量精美壁纸的网站,吸引了众多用户。通过 Python 爬虫技术,可以自动化地从该网站获取所需的壁纸资源,为用户节省时间和精力。然而,网站通常会采取反爬措施来防止数据被恶意抓取,因此需要在爬虫程序…...

Java常用注解大全(基于JDK17+SpringBoot3)

一、基础注解(Java原生) 编译相关 @Override:方法重写校验 java 复制 下载 @Override public String toString() { return "CustomObj"; } @Deprecated:标记过时元素 java 复制 下载 @Deprecated(since="1.8", forRemoval=true) public void oldMethod…...

【NLP】30. 深入理解 In-Context Learning 的核心机制与策略

In-Context Learning&#xff08;ICL&#xff09;详解&#xff1a;提示学习时代的语言理解 一、什么是 In-Context Learning&#xff08;ICL&#xff09;&#xff1f; In-Context Learning 是指&#xff1a; 不改变模型参数&#xff0c;通过在输入中加入示例&#xff08;demon…...

数字化工厂中央控制室驾驶舱系统 - Windows 部署笔记

数字化工厂中央控制室驾驶舱系统 - Windows 部署笔记 环境准备 这篇笔记记录了我在 Windows 10/11 上部署数字化工厂中央控制室驾驶舱系统的全过程&#xff0c;包括各种常见问题的解决方法。部署过程中使用了国内镜像源来加快下载速度。 前置需求 Python&#xff1a;3.8 到…...

数据库的原子事务

原子事务 11.1 全有或全无效应 二级索引需要原子性的多键更新&#xff0c;这不仅对数据库内部一致性至关重要&#xff0c;也对应用数据的一致性非常有用&#xff08;例如考虑账户余额和账户交易&#xff09;。 我们将放弃get-set-del接口&#xff0c;并添加一个新的接口来允…...

基于51单片机的红外人体感应报警器

基于51单片机的人体监测报警 &#xff08;仿真&#xff0b;程序&#xff0b;原理图&#xff0b;PCB&#xff09; 功能介绍 具体功能&#xff1a; 1.按下报警按钮会发生红LED蜂鸣器声光报警&#xff1b; 2.若检测到人&#xff0c;黄LED打开&#xff1b; 3.按下布防按键&…...

从Excel到高级工具:数据分析进阶指南

从Excel到高级工具&#xff1a;数据分析进阶指南 在数据分析的世界里&#xff0c;Excel曾经是众多人的第一站。它简单、直观、功能强大&#xff0c;从普通用户到专业人士&#xff0c;无不对其依赖。然而&#xff0c;随着数据规模增长、分析需求升级&#xff0c;Excel渐渐显得力…...

Excel VBA 自定义函数

一、VBA 函数基础概念 在 Excel VBA 中&#xff0c;函数主要分为两种类型&#xff1a; Sub 过程&#xff1a;执行操作但不返回值Function 函数&#xff1a;执行操作并返回结果 基本语法示例 1. Function 函数示例 定义一个返回字符串的公共函数 Public Function GetGreetin…...

004-nlohmann/json 快速认识-C++开源库108杰

了解 nlohmann/json 的特点&#xff1b;理解编程中 “数据战场”划分的概念&#xff1b;迅速上手多种方式构建一个JSON对象&#xff1b; 1 特点与安装 nlohmann/json 是一个在 github 长期霸占 “JSON” 热搜版第1的CJSON处理库。它的最大优点是与 C 标准库的容器数据&#xf…...

【Quest开发】接入语音转文字

参考官方文档&#xff1a;https://developers.meta.com/horizon/documentation/unity/voice-sdk-tutorials-overview 软件&#xff1a;Unity 2022.3.51f1c1、vscode、Meta XR All in One SDK V72 硬件&#xff1a;Meta Quest3 注意&#xff1a;需全程科学上网 Meta提供了一…...

Vim 命令从头学习记录

学习链接&#xff1a;eleon-vim基础教程 Vim - 基础翻屏操作 光标移动&#xff1a;hjkl 20j 向下移动20行&#xff0c;w 向后移动一个字符&#xff0c;b 向前移动一个字符。 Ctrl u 向上翻半页 UP Ctrl d 向下翻半页 Down Ctrl f 向下翻整页 Forward Ctrl b 向上翻整页 …...

[Linux]物理地址到虚拟地址的转化

[Linux]物理地址到虚拟地址的转化 水墨不写bug 文章目录 一、再次认识地址空间二、页表1、页表的结构设计2、页表节省了空间&#xff0c;省在哪里&#xff1f;3、页表的物理实现 一、再次认识地址空间 OS和磁盘交互的内存基本单位是4KB&#xff0c;这4KB通常被称为内存块。OS对…...

js获取明天日期、Vue3大菠萝 Pinia的使用

直接上代码 const today new Date(2019, 2, 28) const finalDate new Date(today) finalDate.setDate(today.getDate() 3)console.log(finalDate) // 31 March 2019 安装 yarn add pinia # or with npm npm install pinia创建第一个store仓库 1、在src目录下创建store目录…...

矩阵置零(中等)

可以用两个标记数组分别记录每一行和每一列是否有零出现。 首先遍历该数组一次&#xff0c;如果某个元素为 0&#xff0c;那么就将该元素所在的行和列所对应标记数组的位置置为 true。然后再次遍历该数组&#xff0c;用标记数组更新原数组。 class Solution {public void set…...

GZ人博会自然资源系统(测绘)备考笔记

本文为备考 GZ人才博览会自然资源系统&#xff08;测绘&#xff09; 的笔记&#xff0c;包括若干 知识点整理 及 近两年考核&#xff08;面试&#xff09;真题 &#xff08;文末附《GZ人博会自然资源系统&#xff08;测绘&#xff09;备考笔记》1 的下载链接&#xff09;。 目录…...

《进制转换的终极指南:原理、方法与编程应用》

&#x1f680;个人主页&#xff1a;BabyZZの秘密日记 &#x1f4d6;收入专栏&#xff1a;C语言 &#x1f30d;文章目入 一、进制转换的基本原理二、进制转换方法总结&#xff08;一&#xff09;使用权重法的转换1. 二进制 → 十进制2. 八进制 → 十进制3. 十六进制 → 十进制 &…...

2025系统架构师---论软件的设计模式论文

2023 年,我所在的公司承担了某部网络靶场的研发任务。我作为公司的技 术总监,希望能打造基于网络靶场的系列产品,参与到项目的设计中,以期开发 扩展性和可维护性良好的网络靶场,为以后的产品开发打下基础。网络靶场是网 络安全技术研究的基础支撑平台,它利用虚拟的和实物…...

嵌入式Linux驱动学习

Ubuntu18 下载链接 https://releases.ubuntu.com/bionic/ Ubuntu配置静态IP 更新Ubuntu18的镜像源 以清华大学镜像源举例 网站&#xff1a;https://mirrors.tuna.tsinghua.edu.cn/ 第一步点开网站搜索ubuntu然后点击问号 第二步选择自己的Ubuntu版本 第三步在Ubuntu中复制…...

基于大模型的子宫腺肌病全流程预测与诊疗方案研究报告

目录 一、引言 1.1 研究背景与意义 1.2 研究目的与创新点 二、子宫腺肌病概述 2.1 疾病定义与病理机制 2.2 流行病学特征 2.3 现有诊断与治疗方法综述 三、大模型技术原理与应用基础 3.1 大模型简介 3.2 在医疗领域的应用现状 3.3 适用于子宫腺肌病预测的可行性分析…...