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

Mp3文件结构全解析(一)

Mp3文件结构全解析(一)

MP3 文件是由帧(frame)构成的,帧是MP3 文件最小的组成单位。MP3的全称应为MPEG1 Layer-3 音频
文件,MPEG(Moving Picture Experts Group) 在汉语中译为活动图像专家组,特指活动影音压缩标准,MPEG 音频文件是MPEG1 标准中的声音部分,也叫MPEG 音频层,它根据压缩质量和编码复杂程度划分为三层,即Layer-1、Layer2、Layer3, 且分别对应MP1、MP2、MP3 这三种声音文件,并根据不同的用途,使用不同层次的编码。MPEG 音频编码的层次越高,编码器越复杂,压缩率也越高,MP1 和MP2 的压缩率分别为4:1 和6:1-8:1,而MP3 的压缩率则高达10:1-12:1,也就是说,一分钟CD 音质的音乐,未经压缩需要10MB的存储空间,而经过MP3 压缩编码后只有1MB 左右。不过MP3 对音频信号采用的是有损压缩方式,为了降低声音失真度,MP3采取了“感官编码技术”,即编码时先对音频文件进行频谱分析,然后用过滤器滤掉噪音电平,接着通过量化的方式将剩下的每一位打散排列,最后形成具有较高压缩比的MP3 文件,并使压缩后的文件在回放时能够达到比较接近原音源的声音效果。

整体结构

MP3 文件大体分为四部分:TAG_V2(ID3V2),Frame, TAG_V1(ID3V1),其他说明信息

  • ID3V2 包含了作者,作曲,专辑等信息,长度不固定,扩展了ID3V1 的信息量。
  • Frame 一系列的帧,个数由文件大小和帧长决定,每个FRAME 的长度可能不固定,也可能固定,由位率bitrate 决定, 每个FRAME 又分为帧头和数据实体两部分,帧头记录了mp3 的位率,采样率,版本等信息,每个帧之间相互独立
  • ID3V1 包含了作者,作曲,专辑等信息,长度为128BYTE。
  • 其他说明信息(不重要)

ID3V2解析

ID3V2一共有四个版本,ID3V2.1/2.2/2.3/2.4,目前流行的播放软件一般只支持第三版即ID3V2.3,由于ID3V1记录在文件的末尾处,ID3V2就只能记录在文件的首部了,也是因为这个原因,对ID3V2的操作比ID3V1要慢,而且ID3V2的结构比ID3V1的结构复杂的多,但是ID3V2可以记录更多的信息,长度可变

ID3V2 主要有四个版本,现在主流的是ID3V2.3,ID3V3.4, 2.2,2.1与后面版本差异较大:2.2的Frame head id是三个字节,而2.3,2.4是四个字节.

ID3V2.3由一个标签头和若干个标签帧或者一个扩展标签头组成,至少要有一个标签帧,每一个标签帧记录一种信息,例如作曲、标题等

ID3V2.4 Overall tag structure:

 +-----------------------------+|      Header (10 bytes)      |+-----------------------------+|       Extended Header       || (variable length, OPTIONAL) |+-----------------------------+|   Frames (variable length)  |+-----------------------------+|           Padding           || (variable length, OPTIONAL) |+-----------------------------+| Footer (10 bytes, OPTIONAL) |+-----------------------------+

标签头

位于文件开始处,长度为10字节,结构如下:

  • char Header[3]; /*必须为“ID3”否则认为标签不存在*/
  • char Ver; /*版本号ID3V2.3 就记录3*/
  • char Revision; /*副版本号此版本记录为0*/
  • char Flag; /*标志字节,只使用高三位,其它位为0 */
  • char Size[4]; /*标签大小*/

注:标签大小,不能确定具体包括哪些内容,解析歌曲文件后,发现没有哪些字节之和会等于该值,详见下面的实例分析

标志字节一般为0,定义如下(abc000000B)

  • a:表示是否使用Unsynchronisation
  • b:表示是否有扩展头部,一般没有,所以一般也不设置
  • c:表示是否为测试标签,99.99%的标签都不是测试标签,不设置

标签大小共四个字节,每个字节只使用低7位,最高位不使用恒为0,计算时将最高位去掉,得到28bit的数据,计算公式如下:
Size=(Size[0]&0x7F)*0x200000+(Size[1]&0x7F)*0x4000+(Size[2]&0x7F)*0x80+(Size[3]&0x7F)
注意:很多文章这里面写的是Size[1]&0x7F)*0x4000,左移14位是乘以0x4000,很多文章抄来抄去,源头出问题了,所有的都会出问题

以《胡广生.mp3》为例,使用UltraEdit工具打开如下,读者可自己对照上述结构,本章结束会给出详细的结构分析
在这里插入图片描述

标签帧

每个标签帧都有10个字节的帧头(和标签头不是一个东西,虽然他们刚好都是10字节,标签头只有一个,每个标签帧都有一个帧头)和至少一个字节的内容构成,标签帧与标签头/其他标签帧无特殊字节分割,只能通过帧头信息来确定帧内容的大小。

帧头长度10字节,定义如下:

  • char ID[4]; /*标识帧,说明其内容,例如作者/标题等*/
  • char Size[4]; /*帧内容的大小,不包括帧头,不得小于1*/
  • char Flags[2]; /*标志帧,只定义了6 位*/

标识帧,常见的内容如下:

  • TIT2=标题
  • TPE1=作者
  • TALB=专集
  • TRCK=音轨格式:N/M 其中N为专集中的第N首,M为专集中共M首,N和M 为ASCII 码表示的数字
  • TYER=年代是用ASCII 码表示的数字
  • TCON=类型直接用字符串表示
  • COMM=备注格式:“eng\0备注内容”,其中eng 表示备注所使用的自然语言

ID3V2.4中,帧内容大小,计算公式如下:

Size=(Size[0]&0x7F)*0x200000+(Size[1]&0x7F)*0x4000+(Size[2]&0x7F)*0x80+(Size[3]&0x7F)

很多文章是这样的:

Size = Size[0]*0x100000000 + Size[1]*0x10000+ Size[2]*0x100 +Size[3];

其实是有问题的.
标志帧,使用每个字节的高三位,其他位均为0(abc00000B xyz00000B)

  • a – 标签保护标志,设置时认为此帧作废
  • b – 文件保护标志,设置时认为此帧作废
  • c – 只读标志,设置时认为此帧不能修改
  • x – 压缩标志,设置时一个字节存放两个BCD 码表示数字
  • y-- 加密标志
  • z-- 组标志,设置时说明此帧和其他的某帧是一组
    在这里插入图片描述

ID3V1解析

ID3 V1.0标准并不周全,存放的信息少,无法存放歌词,无法录入专辑封面、图片等。V2.0是一个相当完备的标准,但给编写软件带来困难,虽然赞成此格式的人很多,在软件中真正实现的却极少。绝大多数MP3仍使用ID3 V1.0标准。此标准是将MP3文件尾的最后128个字节用来存放ID3信息
在这里插入图片描述

实例分析

歌曲信息

<<胡广生.mp3>>

结构解析

标签头

在这里插入图片描述

标签头:10字节,00H-09H

12345678910
49443304000000031027
I(73)D(68)3(51)4(V2.4)0(revision)0(flag)0x000x030x100x27

(Size[0]&0x7F)*0x200000+(Size[1]&0x7F)*0x400+(Size[2]&0x7F)*0x80+(Size[3]&0x7F)
= (0x00&0x7F)*0x200000 + (0x03&0x7f)*0x4000 + (0x10&0x7f)*0x80 + (0x27&0x7f)
= 0x00 + 0xc000 + 0x800 + 0x27 = 0xc824 = 51239个字节

(0x00&0x7F)<<21 + (0x03&0x7f)<<14 + (0x10&0x7f)*<<7 + (0x27&0x7f)
= 0x0 + 0xC000 + 0x800 + 0x27

TIT2标签帧

在这里插入图片描述

地址字节说明
AH-DH454 49 54 32TIT2标签帧说明
EH-11H400 00 00 09帧内容大小: 9个字节
12H-13H200 00标志,均为0
14H- 1CH901 FF FE E1 80 7F 5E 1F 75帧内容
TALB标签帧

在这里插入图片描述

地址字节说明
1dH-20H454 41 4C 42TALB标签帧说明
21H-24H400 00 00 09帧内容大小: 9个字节
25H-26H200 00标志,均为0
27H- 2FH901 FF FE E1 80 7F 5E 1F 75帧内容
TPE1标签帧

在这里插入图片描述

地址字节说明
30H-33H454 50 45 31TPE1标签帧说明
34H-37H400 00 00 09帧内容大小: 9个字节
38H-39H200 00标志,均为0
27H- 2FH901 FF FE FB 4E 20 7D 50 6C帧内容
APIC标签帧

This frame contains a picture directly related to the audio file. Image format is the MIME type and subtype for the image. In the event that the MIME media type name is omitted, “image/” will be implied. The “image/png” or “image/jpeg” picture format should be used when interoperability is wanted. Description is a short description of the picture, represented as a terminated textstring. The description has a maximum length of 64 characters, but may be empty. There may be several pictures attached to one file, each in their individual “APIC” frame, but only one with the same content descriptor. There may only be one picture with the picture type declared as picture type $01 and $02 respectively. There is the possibility to put only a link to the image file by using the ‘MIME type’ “–>” and having a complete URL instead of picture data. The use of linked files should however be used sparingly since there is the risk of separation of files.

<Header for 'Attached picture', ID: "APIC">
Text encoding   $xx
MIME type       <text string> $00
Picture type    $xx
Description     <text string according to encoding> $00 (00)
Picture data    <binary data>

Picture type:

$00     Other
$01     32x32 pixels 'file icon' (PNG only)
$02     Other file icon
$03     Cover (front)
$04     Cover (back)
$05     Leaflet page
$06     Media (e.g. lable side of CD)
$07     Lead artist/lead performer/soloist
$08     Artist/performer
$09     Conductor
$0A     Band/Orchestra
$0B     Composer
$0C     Lyricist/text writer
$0D     Recording Location
$0E     During recording
$0F     During performance
$10     Movie/video screen capture
$11     A bright coloured fish
$12     Illustration
$13     Band/artist logotype
$14     Publisher/Studio logotype

在这里插入图片描述

省略
在这里插入图片描述

地址字节说明
43H-46H441 50 49 43APIC标签帧说明
47H-4AH400 01 43 65帧内容大小: 83789个字节
38H-39H200 00标志,均为0
27H- 2FH900 69 …帧内容
帧内容大小:

Size = Size[0]*0x00000000 + Size[1]*0x10000+ Size[2]*0x100 +Size[3]

=0x010x10000+0x430x100+0x65

=0x10000+0x4300+0x65

=0x14365=82789

82789 / 16 = 5174 = 0x1436
82789 % 16 = 6

0x1436 + 0x2 = 0x1438
3 + 6 = 9

实现一个MP3解析器之标签解析

根据上面分析,先要读取标签头,先读取十个字节的标签头,定义一个结构体:

struct tagheader {char ID[3];          // The first 4 bytes should be ID3char version[2];     // $03 00char flags;          // $abc00000 : a:unsynchronisation if set; b:extended header exist if set; c:experimental indicator if setchar size[4];        // (total tag size - 10) excluding the tagheader;
};

读取十个字节:

struct tagheader header;size_t sz;if (read(fd, &header, sizeof(header)) < 0) {perror("Read File: ");exit(1);}

计算标签大小:

sz = (header.size[0] & 0x7F) * 0x200000 + (header.size[1] & 0x7F) * 0x400 + (header.size[2] & 0x7F) * 0x80 + (header.size[3] & 0x7F);

接下来遍历读取每一个标签帧,每个标签帧又有十个字节的标签帧头,同样定义一个结构体:

struct frameheader {char frameid[4];    // TIT2 MCDI TRCK ...char size[4];char flags[2];      // %abc00000  %ijk00000 | a 0:frame should be preserved 1:frame should be discard
};

接下来循环读取标签帧头:

struct frameheader header;int framesz = 0;int start = 0;while(start <= tagsize){if (read(fd, &header, sizeof(header)) < 0) {perror("Read File: ");return -1;}start += sizeof(header);if(start > tagsize){printf("has parsed all\n");return 1;}framesz = header.size[0]*0x100000000 + header.size[1]*0x10000 + header.size[2]*0x100 + header.size[3];start+=framesz;...

计算到标签body大小后,读取标签大小内容,并且转换成可读内容:

    ...char* input = malloc(framesz);if(read(fd, input, framesz)< 0){printf("error");return -1;}if(strncmp(header.frameid, "APIC", 4) == 0){//attach picture是图片内容,不可以转为文字printf("The %s is:\t\t Attach Picture, size = %d\n", header.frameid, framesz);continue;}framesz -= 1;   // framesz include the encode of the ID, so minus the encode byte; depend on the type of the tagid.if (framesz <= 0) continue;char* encode = (*input == 1)? "UTF-16" : "GB18030";  // The biggest problem is here, hard to know encode,so just guesssize_t outsize = framesz * 2;char* result = malloc(outsize);bzero(result, outsize);char *temp = input+1;if (strncmp(header.frameid, "PRIV", 4) == 0) {   // PRIV's handle is a bit of special, still don't understand encode = "ISO-8859-1";temp = input;framesz +=1;}if ((doconv(temp, framesz, encode, result, outsize)) == -1) {perror("doconv: ");continue;}printf("The %s is:\t\t%s, size = %d\n", header.frameid, result, framesz);free(result);}

到此为止,已经可以把所有的标签内容读取成功并打印了.详细代码参考:
https://github.com/qingkouwei/mp3parser

Mp3格式定义参考官网:
http://id3.org/id3v2.4.0-structure

附录

帧标识

  • AENC:Audioencryption
  • APIC:Attached picture
  • COMM:Comments
  • COMR:Commercial
  • ENCR:Encryptionmethod registration
  • EQUA:Equalization
  • ETCO:Event timingcodes
  • GEOB:Generalencapsulated object
  • GRID:Groupidentification registration
  • IPLS:Involvedpeople list
  • LINK:Linkedinformation
  • MCDI:Music CDidentifier
  • MLLT:MPEGlocationlookup table
  • OWNE:Ownership
  • PRIV:Private
  • PCNT:Playcounter
  • POPM:Popularimeter
  • POSS:Positionsynchronisation
  • RBUF:Recommendedbuffer size
  • RVAD:Relativevolume adjustment
  • RVRB:Reverb
  • SYLT:Synchronizedlyric/text
  • SYTC:Synchronizedtempo codes
  • TALB:Album/Movie/Showtitle
  • TBPM:BPM(beats perminute)
  • TCOM:Composer
  • TCON:Content type
  • TCOP:Copyrightmessage
  • TDAT:Date
  • TDLY:Playlistdelay
  • TENC:Encoded by
  • TEXT:Lyricist/Textwriter
  • TFLT:Filetype
  • TIME:Time
  • TIT1:Content groupdeion
  • TIT2:Title/songname/contentdeion
  • TIT3:Subtitle/Deionrefinement
  • TKEY:Initial key
  • TLAN:Language(s)
  • TLEN:Length
  • TMED:Media type
  • TOAL:Originalalbum/movie/show title
  • TOFN:Originalfilename
  • TOLY:Originallyricist(s)/text writer(s)
  • TOPE:Originalartist(s)/performer(s)
  • TORY:Originalrelease year
  • TOWN:Fileowner/licensee
  • TPE1:Leadperformer(s)/Soloist(s)
  • TPE2:Band/orchestra/accompaniment
  • TPE3:Conductor/performerrefinement
  • TPE4:Interpreted,remixed, or otherwise modified by
  • TPOS:Partof a set
  • TPUB:Publisher
  • TRCK:Tracknumber/Position in set
  • TRDA:Recordingdates
  • TRSN:Internetradio station name
  • TRSO:Internetradio station owner
  • TSIZ:Size
  • TSRC:ISRC(internationalstandard recording code)
  • TSSE:Software/Hardwareand settings used for encoding
  • TYER:Year
  • TXXX:Userdefinedtext information
  • UFID:Unique fileidentifier
  • USER:Terms of use
  • USLT:Unsychronizedlyric/text tranion
  • WCOM:Commercialinformation
  • WCOP:Copyright/Legalinformation
  • WOAF:Officialaudio file webpage
  • WOAR:Officialartist/performer webpage
  • WOAS:Officialaudio source webpage
  • WORS:Officialinternet radio station homepage
  • WPAY:Payment
  • WPUB:Publishersofficial webpage
  • WXXX:UserdefinedURL link

音乐类型

  • 0=“Blues”;
  • 1=“ClassicRock”;
  • 2=“Country”;
  • 3=“Dance”;
  • 4=“Disco”;
  • 5=“Funk”;
  • 6=“Grunge”;
  • 7=“Hip-Hop”;
  • 8=“Jazz”;
  • 9=“Metal”;
  • 10=“NewAge”;
  • 11=“Oldies”;
  • 12=“Other”;
  • 13=“Pop”;
  • 14=“R&B”;
  • 15=“Rap”;
  • 16=“Reggae”;
  • 17=“Rock”;
  • 18=“Techno”;
  • 19=“Industrial”;
  • 20=“Alternative”;
  • 21=“Ska”;
  • 22=“Deathl”;
  • 23=“Pranks”;
  • 24=“Soundtrack”;
  • 25=“Euro-Techno”;
  • 26=“Ambient”;
  • 27=“Trip-Hop”;
  • 28=“Vocal”;
  • 29=“Jazz+Funk”;
  • 30=“Fusion”;
  • 31=“Trance”;
  • 32=“Classical”;
  • 33=“Instrumental”;
  • 34=“Acid”;
  • 35=“House”;
  • 36=“Game”;
  • 37=“SoundClip”;
  • 38=“Gospel”;
  • 39=“Noise”;
  • 40=“AlternRock”;
  • 41=“Bass”;
  • 42=“Soul”;
  • 43=“Punk”;
  • 44=“Space”;
  • 45=“Meditative”;
  • 46=“InstrumentalPop”;
  • 47=“InstrumentalRock”;
  • 48=“Ethnic”;
  • 49=“Gothic”;
  • 50=“Darkwave”;
  • 51=“Techno-Industrial”;
  • 52=“Electronic”;
  • 53=“Pop-Folk”;
  • 54=“Eurodance”;
  • 55=“Dream”;
  • 56=“SouthernRock”;
  • 57=“Comedy”;
  • 58=“Cult”;
  • 59=“Gangsta”;
  • 60=“Top40”;
  • 61=“ChristianRap”;
  • 62=“Pop/Funk”;
  • 63=“Jungle”;
  • 64=“NativeAmerican”;
  • 65=“Cabaret”;
  • 66=“NewWave”;
  • 67=“Psychadelic”;
  • 68=“Rave”;
  • 69=“Showtunes”;
  • 70=“Trailer”;
  • 71=“Lo-Fi”;
  • 72=“Tribal”;
  • 73=“AcidPunk”;
  • 74=“AcidJazz”;
  • 75=“Polka”;
  • 76=“Retro”;
  • 77=“Musical”;
  • 78=“Rock&Roll”;
  • 79=“HardRock”;
  • 80=“Folk”;
  • 81=“Folk-Rock”;
  • 82=“NationalFolk”;
  • 83=“Swing”;
  • 84=“FastFusion”;
  • 85=“Bebob”;
  • 86=“Latin”;
  • 87=“Revival”;
  • 88=“Celtic”;
  • 89=“Bluegrass”;
  • 90=“Avantgarde”;
  • 91=“GothicRock”;
  • 92=“ProgessiveRock”;
  • 93=“PsychedelicRock”;
  • 94=“SymphonicRock”;
  • 95=“SlowRock”;
  • 96=“BigBand”;
  • 97=“Chorus”;
  • 98=“EasyListening”;
  • 99=“Acoustic”;
  • 100=“Humour”;
  • 101=“Speech”;
  • 102=“Chanson”;
  • 103=“Opera”;
  • 104=“ChamberMusic”;
  • 105=“Sonata”;
  • 106=“Symphony”;
  • 107=“BootyBass”;
  • 108=“Primus”;
  • 109=“PornGroove”;
  • 110=“Satire”;
  • 111=“SlowJam”;
  • 112=“Club”;
  • 113=“Tango”;
  • 114=“Samba”;
  • 115=“Folklore”;
  • 116=“Ballad”;
  • 117=“PowerBallad”;
  • 118=“RhythmicSoul”;
  • 119=“Freestyle”;
  • 120=“Duet”;
  • 121=“PunkRock”;
  • 122=“DrumSolo”;
  • 123=“Acapella”;
  • 124=“Euro-House”;
  • 125=“DanceHall”;
  • 126=“Goa”;
  • 127=“Drum&Bass”;
  • 128=“Club-House”;
  • 129=“Hardcore”;
  • 130=“Terror”;
  • 131=“Indie”;
  • 132=“BritPop”;
  • 133=“Negerpunk”;
  • 134=“PolskPunk”;
  • 135=“Beat”;
  • 136=“ChristianGangstaRap”;
  • 137=“Heavyl”;
  • 138=“Blackl”;
  • 139=“Crossover”;
  • 140=“ContemporaryChristian”;
  • 141=“ChristianRock”;
  • 142=“Merengue”;
  • 143=“Salsa”;
  • 144=“Trashl”;
  • 145=“Anime”;
  • 146=“JPop”;
  • 147=“Synthpop”;

参考

  • MPEG简介+如何计算CBR/VBR MP3的播放时间-1
  • MPEG简介 + 如何计算CBR/VBR MP3的播放时间 - 2
  • MPEG简介 + 如何计算CBR/VBR MP3的播放时间 - 3
  • MPEG简介 + 如何计算CBR/VBR MP3的播放时间 - 4
  • MPEG简介 + 如何计算CBR和VBR的MP3的播放时间 v1.5
  • Mp3格式总结
  • MP3文件结构解析(超详细)
  • MP3编码分析
  • (官网)ISO/IEC 11172-1:1993(en)Information technology — Coding of moving pictures and associated audio for digital storage media at up to about 1,5 Mbit/s — Part 1: Systems
  • (官网)ISO/IEC 11172-3:1993(en)
    Information technology — Coding of moving pictures and associated audio for digital storage media at up to about 1,5 Mbit/s — Part 3: Audio
  • (ietf)The audio/mpeg Media Type
  • (wikipedia)MP3
  • (fileformat)MP3
  • (官网)ID3 tag version 2.4.0 - Main Structure
  • (官网)ID3 tag version 2.3.0
  • (官网)ID3 tag version 2.2.0
  • github ParseMp3tag

下篇 Mp3文件结构全解析(二)接着分析MP3文件的音频内容解析
示例代码地址:git@github.com:qingkouwei/mp3parser.git
*如果对你有帮助的话点个赞吧!!!

相关文章:

Mp3文件结构全解析(一)

Mp3文件结构全解析(一) MP3 文件是由帧(frame)构成的&#xff0c;帧是MP3 文件最小的组成单位。MP3的全称应为MPEG1 Layer-3 音频 文件&#xff0c;MPEG(Moving Picture Experts Group) 在汉语中译为活动图像专家组&#xff0c;特指活动影音压缩标准&#xff0c;MPEG 音频文件…...

ES 8.14 Java 代码调用,增加knnSearch 和 混合检索 mixSearch

1、pom依赖 <dependency><groupId>org.elasticsearch.client</groupId><artifactId>elasticsearch-rest-client</artifactId><version>8.14.0</version></dependency><dependency><groupId>co.elastic.clients<…...

被腰斩的颍川郡守赵广汉

在颍川&#xff0c;他发明了举报箱&#xff0c;铁腕扫黑除恶。因为曾经在郡府所在地阳翟&#xff08;禹州&#xff09;当过县令&#xff0c;熟悉颍川社情民意&#xff0c;所以&#xff0c;任职郡守后雷厉风行&#xff0c;才不到一年&#xff0c;不但制服了骄横的豪门大族&#…...

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 目录管理器(200分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 目录管理器(200分) 🌍 评测功能需要订阅专栏后私信联系清隆…...

关于自学\跳槽\转行做网络安全行业的一些建议

很好&#xff0c;如果你是被题目吸引过来的&#xff0c;那请看完再走&#xff0c;还是有的~ 为什么写这篇文章 如何自学入行&#xff1f;如何小白跳槽&#xff0c;年纪大了如何转行等类似问题 &#xff0c;发现很多人都有这样的困惑。下面的文字其实是我以前的一个回答&#…...

计算机网络(1) OSI七层模型与TCP/IP四层模型

一.OSI七层模型 OSI 七层模型是国际标准化组织ISO提出的一个网络分层模型&#xff0c;它的目的是使各种不同的计算机和网络在世界范围内按照相同的标准框架实现互联。OSI 模型把网络通信的工作分为 7 层&#xff0c;从下到上分别是物理层、数据链路层、网络层、传输层、会话层、…...

认识QML

为什么使用Qt Quick&#xff1f; Qt4的设计用于满足开发者在主流桌面操作系统上有一套表现一致的窗口组件可以 使用。如今Qt的使用者面临了新的问题&#xff0c;他们需要提供可触碰交互的用户界面以满 足软件界面需求&#xff0c;并在主流桌面操作系统和移动操作系统上实现这些…...

llama-factory微调chatglm3

一、定义 案例/多卡 二、实现 案例 1. 下载chatglm3-6b-32k模型 2. 配置数据集微调指令 CUDA_VISIBLE_DEVICES0,1 llamafactory-cli train \--stage sft \--do_train True \--model_name_or_path /home/chatglm3-6b-32k \--finetuning_type lora \--template chatglm3 \--d…...

大文件上传实现

分片上传 将大文件分割成多个小片&#xff08;chunk&#xff09;&#xff0c;逐个上传。每个片上传成功后&#xff0c;服务器可以返回确认信息。所有片上传完成后&#xff0c;服务器端将这些片重新组合成原始文件。 以下是一个简单的分片上传的前端实现示例&#xff1a; func…...

为何Proteus用户争相拥抱SmartEDA?揭秘背后的强大吸引力!

在电路设计与仿真领域&#xff0c;Proteus一度以其稳定性能和丰富功能赢得了众多用户的青睐。然而&#xff0c;近年来&#xff0c;越来越多的Proteus用户开始转向SmartEDA&#xff0c;这一新兴电路仿真软件正迅速崭露头角&#xff0c;成为行业内的翘楚。那么&#xff0c;究竟是…...

万界星空科技QMS质量管理介绍

产品的生产质量是企业发展之根本&#xff0c;对所有企业来说&#xff0c;建立完善质量控制体系&#xff0c;对企业生产经营以及发展竞争具有至关重要的影响&#xff0c;可以说是企业质量保证的防火墙。QMS质量管理系统对任何一家企业都具有重要意义&#xff0c;可帮助企业提高生…...

神经网络 torch.nn---nn.LSTM()

torch.nn - PyTorch中文文档 (pytorch-cn.readthedocs.io) LSTM — PyTorch 2.3 documentation LSTM层的作用 LSTM层:长短时记忆网络层&#xff0c;它的主要作用是对输入序列进行处理&#xff0c;对序列中的每个元素进行编码并保存它们的状态&#xff0c;以便后续的处理。 …...

Web前端JSP软件:深度解析与探索之旅

Web前端JSP软件&#xff1a;深度解析与探索之旅 在当今数字化时代&#xff0c;Web前端技术日新月异&#xff0c;JSP&#xff08;Java Server Pages&#xff09;软件作为其中的佼佼者&#xff0c;扮演着举足轻重的角色。本文将从四个方面、五个方面、六个方面和七个方面&#x…...

人生的乐趣,在于对真知的追求

子曰&#xff1a;朝闻道&#xff0c;夕死可矣&#xff01; 孔子说&#xff1a;早上听到关于世界的真理&#xff0c;哪怕晚上就die了都可以。 这句话很有力量而经常被人引用&#xff0c;表达出我们如何看待沉重的肉身和精神世界。 我们的生活目的&#xff1a;道。 —— 要了解…...

IPython大揭秘:神奇技巧让你掌握无敌编程力量!

IPython技巧 基础技巧文件操作技巧输入输出技巧魔术命令技巧调试技巧程序性能优化技巧输入输出重定向技巧魔术命令控制技巧自定义显示格式技巧多线程多进程技巧异常处理技巧数据可视化技巧自定义魔术命令技巧安装扩展包技巧Jupyter Notebook集成技巧文档显示技巧代码块执行技巧…...

逻辑卷管理器 (LVM) 简介

古老的 e5 主机目前有这些存储设备 (硬盘): 系统盘 (M.2 NVMe SSD 480GB), 数据盘 (3.5 英寸 SATA 硬盘 4TB x2). 窝决定使用 LVM 对数据盘进行管理. 逻辑卷管理器 (LVM) 可以认为是一种 (单机) 存储虚拟化 技术. 多个物理存储设备 (PV) 组成一个存储池 (VG), 然后划分虚拟分区…...

Swift开发——弱占用

自动引用计数(Automatic Reference Counting&#xff0c;ARC)&#xff0c;是Swift语言管理类的实例的方式。当创建某个类的一个新实例后&#xff0c;ARC自动为新实例分配内存空间&#xff0c;用于保存实例的类型和存储属性&#xff0c;当将该实例赋给常量、变量或其他实例的属性…...

化工电力系统RFID无线测温技术的重要性。

在现代工业体系中&#xff0c;化工电力系统的安全与效率对于整个生产链的顺畅运行至关重要。在日常工作中,由于设备制造的原因,设备受环境污染的原因、设备长期运行、严重超载运行、触点氧化、电弧冲击等原因造接触电阻增大,因此在运行时往往不断发热,温度不断上升,给设备安全运…...

Linux系统:线程互斥

Linux系统&#xff1a;线程互斥 线程互斥互斥锁 mutex互斥锁原理 常见的锁死锁自旋锁 spinlock其它锁 线程互斥 讲解线程互斥前&#xff0c;先看到一个抢票案例&#xff1a; class customer { public:int _ticket_num 0;pthread_t _tid;string _name; };int g_ticket 10000…...

【网络协议栈】TCP/IP相关知识点收集

TCP/IP知识点收集 1 TCP分段 在TCP/IP协议栈中&#xff0c;“MSS”&#xff08;Maximum Segment Size&#xff09;是一个关键参数&#xff0c;它指定了TCP协议在发送数据时可以使用的最大数据段&#xff08;segment&#xff09;的大小。这个参数是TCP连接建立时通过三次握手&…...

Java开发中的常用字段校验注解

在 Java 开发中&#xff0c;数据校验是确保应用程序的数据完整性和一致性的重要步骤。Java 提供了一系列注解来简化数据校验的过程&#xff0c;以下是一些常用的字段校验注解及其示例代码&#xff1a; NotNull NotNull 用于确保字段不为 null&#xff0c;适用于任何类型的字段…...

面试经验分享 | 24年6月某安全厂商HW面试经验

所面试的公司&#xff1a;某安全厂商 所在城市&#xff1a;安徽省 面试职位&#xff1a;蓝初 面试过程&#xff1a; 腾讯会议&#xff08;语音&#xff09; 面试过程&#xff1a;整体流程就是自我介绍加上一些问题问题balabalabala。。。由于面的是蓝队所以渗透部分不会太多…...

JSON学习

一、JSON 1.1 简介 JSON&#xff1a;JavaScript Object Notation是一种表示对象的方式 基于JavaScript语言的轻量级的数据交换格式;&#xff08;即:用来传输数据的一种格式&#xff09; 现在传输数据的方式更多是采用json的格式&#xff0c;渐渐代替了XML 1.2 JSON的数据表示 …...

LabVIEW在中国航天中的应用

​LabVIEW是一种系统设计平台及开发环境&#xff0c;由美国国家仪器公司&#xff08;NI&#xff09;开发。它在中国航天领域的应用非常广泛&#xff0c;涵盖了测试与测量、数据采集、控制系统设计等多个方面。以下是LabVIEW在中国航天中的几个主要应用实例&#xff1a; 1. 测试…...

编程思维的培养

培养编程思维是成为一名优秀程序员的重要步骤。编程思维不仅仅是写代码的能力&#xff0c;还包括解决问题的思维方式、对复杂系统的理解、代码优化的意识、团队合作的能力等。以下是一些培养编程思维的方法和建议。 1. 学习基础知识 1.1 掌握编程语言 从一门编程语言开始&am…...

Docker笔记-Debian容器内搭建ssh服务

登陆容器之后修改密码&#xff1a; passwd 密码设置完成后安装openssh-server apt-get install openssh-server 修改端口号为50022并添加配置 vim /etc/ssh/sshd_config 修改成 Port 50022 PasswordAuthentication yes PermitRootLogin yes 启动 rootlinux:~# /etc/in…...

爬虫的法律风险是什么?以及合法使用爬虫技术的建议。

爬虫的法律风险是什么&#xff1f; 网络爬虫技术&#xff0c;虽然在数据获取方面具有巨大优势&#xff0c;但其使用过程中可能引发的法律风险也不容忽视。这些风险主要包括违反数据保护法规、侵犯知识产权、构成不正当竞争等。下面将详细探讨网络爬虫的法律风险&#xff0c;并在…...

微信小程序允许相机访问相册

// 允许从相机和相册扫码 // uni.scanCode({ // success: function(res) { // console.log(条码类型&#xff1a; res.scanType); // console.log(条码内容&#xff1a; res.result); …...

AMEYA360 | 江苏润石最新发布12颗车规级模拟芯片

日前江苏润石再度新增12颗通过AEC-Q100 Grade1&#xff0c;满足MSL 1湿敏等级认证的车规级芯片。截止目前&#xff0c;润石科技总计有70颗Grade1 & MSL1的车规级芯片通过认证并进入量产。凭借卓越的产品技术指标和稳定的品质性能不仅展示了公司在车规级模拟芯片领域的技术积…...

PHP表单设计:确保必需字段完整性的最佳实践

在开发网页应用程序时&#xff0c;设计一个具有必需字段的PHP表单是至关重要的。必需字段是用户提交表单时必须填写的信息&#xff0c;它们对于确保数据完整性和准确性至关重要。本文将从多个方面讨论如何在PHP表单中设计必需字段&#xff0c;并探讨确保表单数据完整性的最佳实…...

怎么制作代码/网站seo优化徐州百度网络

作为一个使用php 的web开发者&#xff0c;我们都知道php大概是拥有最多的代码库的web开发语言了&#xff0c;所以无论你的项目中向包含什么功能&#xff0c;我们都应该优先考虑开源的项目。why? 开源项目都是许多人共同工作的&#xff0c;应该比一个人的工作做得好 你可以免费…...

wordpress5置顶/地推拉新app推广平台有哪些

转载自&#xff1a;http://www.cnblogs.com/timeng/archive/2012/02/17/2355513.html 今天看了一篇关于android数字签名的讲解&#xff0c;通俗易懂&#xff0c;非常好&#xff0c;所以转载过来分享。 为什么要签名&#xff1f;&#xff1f;&#xff1f; 开发Android的人这么多…...

网络安全知识/郑州专业seo哪家好

在2021世界人工智能大会中&#xff0c;达观数据与浦东青联联合举办了“未来办公 文本赋能”智能语义分析应用论坛&#xff0c;多位专家学者围绕人工智能算法、语义分析、智能办公机器人应用等话题展开了一场精彩的交流盛宴。 复旦大学教授、博士生导师 复旦大学计算机科学技术…...

常州网站建设 光龙/百度浏览器官网下载并安装

一.数据结构 1.概念: "数据结构"(Data Structure)是指相互之间存在1/多种特定关系的数据元素构成的集合,分为逻辑结构和物理结构2.物理结构 (1)概念: "物理结构"是指数据存储在存储器中的方式.存储器主要是指内存,而外部存储器(如磁盘/光盘/软盘)中数据的…...

网站被入侵后需做的检测 1/网络平台推广具体是怎么推广

摘要&#xff1a;这个教程将指导你如何获取数据到你的表单并将这些数据提交。 Author: Shea FrederickTranslater: pplboy Published: May 22, 2007Translater Date:May 30.2007这个教程使用了在getting started tutorial教程中使用过的 雇员信息编辑表单。如果你仍然不熟悉如何…...

一起做网店网站入驻收费/网站关键词排名查询工具

普通的英文半角空格 &#xA0; no-break space &#xff08;普通的英文半角空格但不换行&#xff09; 中文全角空格 &#xff08;一个中文宽度&#xff09; &ensp; en空格 &#xff08;半个中文宽度&#xff09; &emsp; em空格 &#xff08;一个中文宽…...