mp4文件格式系列

mp4文件格式系列1   -   综述
Overview and Introduction

Core Concepts

MP4文件格式中,所有的内容存在一个称为movie的容器中。一个movie可以由多个tracks组成。每个track就是一个随时间变化的媒体序列,例如,视频帧序列。track里的每个时间单位是一个sample,它可以是一帧视频,或者音频。sample按照时间顺序排列。注意,一帧音频可以分解成多个音频sample,所以音频一般用sample作为单位,而不用帧。MP4文件格式的定义里面,用sample这个单词表示一个时间帧或者数据单元。每个track会有一个或者多个sample descriptionstrack里面的每个sample通过引用关联到一个sample description。这个sample descriptions定义了怎样解码这个sample,例如使用的压缩算法。

与其他的多媒体文件格式不同的是,MP4文件格式经常使用几个不同的概念,理解其不同是理解这个文件格式的关键。

这个文件的物理格式没有限定媒体本身的格式。例如,许多文件格式将媒体数据分成帧,头部或者其他数据紧紧跟随每一帧视频,!!!TODO(例如MPEG2)。而MP4文件格式不是如此。

文件的物理格式和媒体数据的排列都不受媒体的时间顺序的限制。视频帧不需要在文件按时间顺序排列。这就意味着如果文件中真的存在这样的一些帧,那么就有一些文件结构来描述媒体的排列和对应的时间信息。

MP4文件中所有的数据都封装在一些box(以前叫atom)。所有的metadata(媒体描述元数据),包括定义媒体的排列和时间信息的数据都包含在这样的一些结构box中。MP4文件格式定义了这些这些box的格式。Metadata对媒体数据(例如,视频帧)引用说明。媒体数据可以包含在同一个的一个或多个box里,也可以在其他文件中,metadata允许使用URLs来引用其他的文件,而媒体数据在这些引用文件中的排列关系全部在第一个主文件中的metadata描述。其他的文件不一定是MP4文件格式,例如,可能就没有一个box

有很多种类的track,其中有三个最重要,video track包含了视频sampleaudio track包含了audio samplehint track稍有不同,它描述了一个流媒体服务器如何把文件中的媒体数据组成符合流媒体协议的数据包。 如果文件只是本地播放,可以忽略hint track,他们只与流媒体有关系。

Physical structure of the media

Box定义了如何在sample table中找到媒体数据的排列。这包括data reference(数据引用), the sample size table, the sample to chunk table, and the chunk offset table. 这些表就可以找到track中每个sample在文件中的位置和大小。

data reference允许在第二个媒体文件中找到媒体的位置。这样,一部电影就可以由一个媒体数据库中的多个不同文件组成,而且不用把它们全部拷贝到另一个新文件中。例如,对视频编辑就很有帮助。

为了节约空间,这些表都很紧凑。另外,interleave不是sample by sample,而是把单个track的几个samples组合到一起,然后另外几个sample又进行新的组合,等等。一个track的连续几个sample组成的单元就被称为chunk。每个chunk在文件中有一个偏移量,这个偏移量是从文件开头算起的,在这个chunk内,sample是连续存储的。

这样,如果一个chunk包含两个sample,第二个sample的位置就是chunk的偏移量加上第一个sample的大小。chunk offset table说明了每个chunk的偏移量,sample to chunk table说明了sample序号和chunk序号的映射关系。

注意chunk之间可能会有死区,没有任何媒体数据引用到这部分区域,但是chunk内部不会有这样的死区。这样,如果在节目编辑的时候,不需要一些媒体数据,就可以简单的留在那里,而不用引用,这样就不用删除它们了。类似的,如果媒体存放在第二个文件中,但是格式不同于MP4文件格式,这个陌生文件的头部或者其他文件格式都可以简单忽略掉。

Temporal structure of the media

文件中的时间可以理解为一些结构。电影以及每个track都有一个timescale。它定义了一个时间轴来说明每秒钟有多少个ticks。合理的选择这个数目,就可以实现准确的计时。一般来说,对于audio track,就是audiosampling rate。对于video track,情况稍微复杂,需要合理选择。例如,如果一个media TimeScale30000media sample durations1001,就准确的定义了NTSC video的时间格式(虽然不准确,但一般就是29.97),and provide 19.9 hours of time in 32 bits.

Track的时间结构受一个edit list影响,有两个用途:全部电影中的一个track的一部分时间片断变化(有可能是重用);空白时间的插入,也就是空的edits。特别注意的是如果一个track不是从节目开头部分开始,edit list的第一个edit就一定是空的edit

每个track的全部duration定义在文件头部,这就是对track的总结,每个sample有一个规定的duration。一个sample的准确描述时间,也就是他的时间戳(time-stamp)就是以前的sampleduration之和。

Interleave

文件的时间和物理结构可以是对齐的,这表明媒体数据在容器中的物理顺序就是时间顺序。另外,如果多个track的媒体数据包含在同一个文件中,这个媒体数据可以是interleaved。一般来说,为了方便读取一个track的媒体数据,同时保证每个表紧凑,以一个合适的时间间隔(例如1秒)做一次interleave,而不是sample by sample。这样就可以减少chunk的数据,减小chunk offset table的大小。

Composition

如果多个audio track包含在同一个文件中,他们有可能被混合在一起进行播放,并且由一个总track volume和左/balance控制。

类似的,video track也可以根据各自的层次序列号(从后向前)和合成模式进行混合。另外,每个track可以用一个matrix进行变换,也可以全部电影用一个matrix进行变换。这样既可以进行简单操作(例如放大图像,校正90º 旋转),也可以做更复杂的操作(例如shearing, arbitrary rotation)。

这个混合方法只是非常简单,是一个缺省的方法,MPEG4的另一份文档会定义更强有力的方法(例如MPEG-4 BIFS)。

mp4文件格式系列2 - mp4文件例子

Darwin Streaming Server里面有一些很好的工具,可以帮助分析mp4文件格式。

但是如果可以自己逐字节的parse文件,可以更好的了解mp4文件格式。这里我就逐字节的分析文件结构。文件例子是DSS里面包含的sample_100kbit.mp4

mp4文件格式系列3 - Movie Atom - MOOV

Movie atom定义了一部电影的数据信息。的类型是'moov'是一个容器atom,至少必须包含三种atom中的一种—movie header atom('mvhd'), compressed movie atom('cmov')reference movie atom ('rmra')。没有压缩的 movie header atom必须至少包含movie header atom reference movie atom中的一种。也可以包含其他的atom,例如一个clipping atom ('clip'),一个或几个track atoms ('trak'),一个color table atom ('ctab'),和一个user data atom ('udta')。其中movie header atom定义了整部电影的time scaleduration信息以及display characteristicstrack atom定义了电影中一个track的信息。Track就是电影中可以独立操作的媒体单位,例如一个声道就是一个track

Compressed movie atoms reference movie atoms 不太使用,不在本文讨论范围内。本文主要讨论uncompressed movie atoms

 

moov atom format

 

字段

长度(字节)

描述

尺寸

4

这个movie header atom的字节数

类型

4

moov

 

以下是实际的sample_100kbit.mp4的部分字节,可以看到结果是

mp4文件格式系列1-3

 

主要包含四个子atommovie header atom(mvhd), 一个audio track atom(trak),一个video track atom(trak)

mp4文件格式系列4 - Movie Header Atoms - MVHD

 

Movie header atom定义了整个movie的特性,例如time scaleduration,它的atom类型是'mvhd'

mp4文件格式系列4

 

字段

长度(字节)

描述

尺寸

4

这个movie header atom的字节数

类型

4

Mvhd

版本

1

这个movie header atom的版本

标志

3

扩展的movie header标志,这里为0

生成时间

4

Movie atom的起始时间。基准时间是1904-1-1 0:00 AM

修订时间

4

Movie atom的修订时间。基准时间是1904-1-1 0:00 AM

Time scale

4

A time value that indicates the time scale for this moviethat is, the number of time units that pass per second in its time coordinate system. A time coordinate system that measures time in sixtieths of a second, for example, has a time scale of 60.

Duration

4

A time value that indicates the duration of the movie in time scale units.Note that this property is derived from the movies tracks. The value of this field corresponds to the duration of the longest track in the movie.

 

播放速度

4

播放此movie的速度。1.0为正常播放速度

播放音量

2

播放此movie的音量。1.0为最大音量

保留

10

这里为0

矩阵结构

36

该矩阵定义了此movie中两个坐标空间的映射关系

预览时间

4

开始预览此movie的时间

预览duration

4

movietime scale为单位,预览的duration

Poster time

4

The time value of the time of the movie poster.

Selection time

4

The time value for the start time of the current selection.

Selection duration

4

The duration of the current selection in movie time scale units.

当前时间

4

当前时间

下一个track ID

4

下一个待添加trackID值。0不是一个有效的ID值。

mp4文件格式系列5 - Track Atoms - TRAK

一个Track atom定义了movie中的一个track。一部movie可以包含一个或多个tracks,它们之间相互独立,各自有各自的时间和空间信息。每个track atom 都有与之关联的media atom

Track主要用于以下目的:

·                     包含媒体数据引用和描述(media tracks)

·                     包含modifier tracks (tweens)

·                     对于流媒体协议的打包信息(hint tracks)Hint tracks可以引用或者复制对应的媒体sample data

Hint tracksmodifier tracks必须保证完整性,同时和至少一个media track一起存在。换句话说,即使hint tracks复制了对应的媒体sample datamedia tracks 也不能从一部hinted movie中删除。

Track atoms atom类型是'trak'. Track atom要求必须有一个track header atom ('tkhd') 和一个media atom ('mdia')。其他的track clipping atom ('clip')track matte atom ('matt')edit atom ('edts')track reference atom ('tref')track load settings atom ('load')a track input map atom ('imap')以及user data atom ('udta')都是可选的。

Track atoms是一个容器atom,本身没有特别的字段,需要子atom来进一步说明有效的内容。

mp4文件格式系列5-6

字段

长度(字节)

描述

尺寸

4

这个atom的字节数

类型

4

Edts

Audio track的值

mp4文件格式系列5-6

Video track的值

mp4文件格式系列5-6

每个trak都包含了一个track header atom

mp4文件格式系列6 - Track Header Atoms - TKHD


每个trak都包含了一个track header atom. The track header atom 定义了一个track的特性,例如时间,空间和音量信息,它的类型是('tkhd').

mp4文件格式系列5-6

 

 

字段

长度(字节)

描述

尺寸

4

这个atom的字节数

类型

4

tkhd

版本

1

这个atom的版本

标志

3

有效的标志是

·                     0x0001 - the track is enabled

·                     0x0002 - the track is used in the movie

·                     0x0004 - the track is used in the movies preview

·                     0x0008 - the track is used in the movies poster

生成时间

4

Movie atom的起始时间。基准时间是1904-1-1 0:00 AM

修订时间

4

Movie atom的修订时间。基准时间是1904-1-1 0:00 AM

Track ID

4

唯一标志该track的一个非零值。

保留

4

这里为0

 

Duration

4

The duration of this track (in the movies time coordinate system).

Note that this property is derived from the tracks edits. The value of this field is equal to the sum of the durations of all of the tracks edits. If there is no edit list, then the duration is the sum of the sample durations, converted into the movie timescale.

保留

8

这里为0

Layer

2

The tracks spatial priority in its movie. The QuickTime Movie Toolbox uses this value to determine how tracks overlay one another. Tracks with lower layer values are displayed in front of tracks with higher layer values.

Alternate group

2

A collection of movie tracks that contain alternate data for one

another. QuickTime chooses one track from the group to be used when the movie is played.

The choice may be based on such considerations as playback quality, language, or the capabilities of the computer.

音量

2

播放此track的音量。1.0为正常音量

保留

2

这里为0

矩阵结构

36

该矩阵定义了此track中两个坐标空间的映射关系

宽度

4

如果该trackvideo track,此值为图像的宽度

高度

4

如果该trackvideo track,此值为图像的高度

 

Audio track的值

mp4文件格式系列5-6

 

Video track的值

mp4文件格式系列7 - Edit Atoms - EDTS


Edit atoms 定义了创建movie中一个track的一部分媒体。所有的edit都在一个表里面,包括每一部分的时间偏移量和长度。Edit atoms 的类型是'edts'。如果没有该表,则此track会被立即播放。一个空的edit用来偏移track的起始时间。

如果没有edit atom edit list atom,则此track使用全部媒体。

Edit atoms是一个容器atom,本身没有特别的字段,需要子atom来进一步说明有效的内容。

mp4文件格式系列7-8

 

 

字段

长度(字节)

描述

尺寸

4

这个atom的字节数

类型

4

Edts

Audio track的值

mp4文件格式系列7-8

 

Video track的值

 

mp4文件格式系列8 - Edit List Atoms - ELST

  1. Edit list atom 用来映射movie的时间到此track media的时间。所有信息在一个edit list 表中,见下图。Edit list atoms 的类型是'elst'.

 

字段

长度(字节)

描述

尺寸

4

这个atom的字节数

类型

4

elst

版本

1

这个atom的版本

标志

3

这里为0

条目数目

4

后面的edit list表中的条目数目

edit list

可变

每一个条目包含3项,见下图和下表

mp4文件格式系列7-8

 

 

字段

长度(字节)

描述

Track duration

4

duration of this edit segment in units of the movies time

scale.

时间

4

starting time within the media of this edit segment (in media

timescale units)。值为-1表示是空editTrack中的最后一个edit永远不能为空。Any difference between the movies duration and the tracks duration is expressed as an implicit empty edit.

速度

4

relative rate at which to play the media corresponding to this edit segment。不能是0或负数。

Audio track的值

mp4文件格式系列7-8

 

Video track的值
mp4文件格式系列9 - Track Reference Atoms - TREF

Track reference atoms define relationships between tracks. Track reference atoms allow one track to specify how it is related to other tracks. For example, if a movie has three video tracks and three sound tracks, track references allow you to identify the related sound and video tracks.  Track reference atoms have an atom type value of 'tref'.

Track references are uni-directional and point from the recipient track to the source track. For example, a video track may reference a time code track to indicate where its time code is stored, but the time code track would not reference the video track. The time code track is the source of time information for the video track.

A single track may reference multiple tracks. For example, a video track could reference a sound track to indicate that the two are synchronized and a time code track to indicate where its time code is stored.

A single track may also be referenced by multiple tracks. For example, both a sound and video track could reference the same time code track if they share the same timing information.

If this atom is not present, the track is not referencing any other track in any way. Note that the array of track reference type atoms is sized to fill the track reference atom. Track references with a reference index of 0 are permitted. This indicates no reference.

mp4文件格式系列9-10

Each track reference atom defines relationships with tracks of a specific type. The reference type

implies a track type. Following table shows the track reference types and their descriptions.

Table: Track reference types

 

Reference type

Description

tmcd

Time code. Usually references a time code track.

chap

Chapter or scene list. Usually references a text track.

sync

Synchronization. Usually between a video and sound track. Indicates that the two tracks are synchronized. The reference can be from either track to the other, or there may be two references.

scpt

Transcript. Usually references a text track.

ssrc

Nonprimary source. Indicates that the referenced track should send its data to this track, rather than presenting it. The referencing track will use the data to modify how it presents its data. See “Track Input Map Atoms” (page 51) for more information.

hint

The referenced tracks contain the original media for this hint track.

Each track reference type atom contains the following data elements.

Size

A 32-bit integer that specifies the number of bytes in this track reference type atom.

Type

A 32-bit integer that identifies the atom type; this field must be set to one of the values shown

in above table.

Track IDs

A list of track ID values (32-bit integers) specifying the related tracks. Note that this is one case

where track ID values can be set to 0. Unused entries in the atom may have a track ID value

of 0. Setting the track ID to 0 may be more convenient than deleting the reference.

You can determine the number of track references stored in a track reference type atom by subtracting its header size from its overall size and then dividing by the size, in bytes, of a track ID.

mp4文件格式系列10 - Media Atoms - MDIA

Media atoms定义了track的媒体类型和sample数据,例如音频或视频,描述sample数据的media handler componentmedia timescale and track duration以及media-and-track-specific 信息,例如音量和图形模式。它也可以包含一个引用,指明媒体数据存储在另一个文件中。也可以包含一个sample table atoms,指明sample description, duration, and byte offset from the data reference for each media sample.

Media atom 的类型是'mdia'。它是一个容器atom,必须包含一个media header atom ('mdhd'),一个handler reference ('hdlr'),一个媒体信息引用('minf')和用户数据atom('udta').

mp4文件格式系列9-10

 

字段

长度(字节)

描述

尺寸

4

这个atom的字节数

类型

4

Edts

Audio track的值

mp4文件格式系列9-10

 

Video track的值
mp4文件格式系列11 - Media Header Atoms - MDHD

Media header atom 定义了媒体的特性,例如time scaleduration。它的类型是'mdhd'.

mp4文件格式系列11-12

 

字段

长度(字节)

描述

尺寸

4

这个atom的字节数

类型

4

mdhd

版本

1

这个atom的版本

标志

3

这里为0

生成时间

4

Movie atom的起始时间。基准时间是1904-1-1 0:00 AM

修订时间

4

Movie atom的修订时间。基准时间是1904-1-1 0:00 AM

Time scale

4

A time value that indicates the time scale for this mediathat is, the number of time units that pass per second in its time coordinate system.

Duration

4

The duration of this media in units of its time scale.

语言

2

媒体的语言码

质量

2

媒体的回放质量???怎样生成此质量,什么是参照点


mp4文件格式系列12 - Handler Reference Atoms - HDLR

Handler reference atom 定义了描述此媒体数据的media handler component,类型是'hdlr'。在过去,handler reference atom也可以用来数据引用,但是现在,已经不允许这样使用了。一个media atom内的handler atom解释了媒体流的播放过程。例如,一个视频handler处理一个video track

mp4文件格式系列11-12

字段

长度(字节)

描述

尺寸

4

这个atom的字节数

类型

4

hdlr

版本

1

这个atom的版本

标志

3

这里为0

Component type

4

handler的类型。当前只有两种类型

·                     'mhlr'media handlers

·                     'dhlr'data handlers

Component subtype

4

media handler or data handler的类型。

如果component typemhlr,这个字段定义了数据的类型,例如,'vide'video数据,'soun'sound数据

如果component typedhlr,这个字段定义了数据引用的类型,例如,'alis'是文件的别名

Component manufacturer

4

保留字段,缺省为0

Component flags

4

保留字段,缺省为0

Component flags mask

4

保留字段,缺省为0

Component name

可变

这个component的名字,也就是生成此mediamedia handler。该字段的长度可以为0

mp4文件格式系列13 - Media Information Atoms - MINF

Media information atoms的类型是'minf',存储了解释该track的媒体数据的handler-specific的信息。media handler用这些信息将媒体时间映射到媒体数据,并进行处理。它是一个容器atom,包含其他的子atom

这些信息是与媒体定义的数据类型特别对应的,而且media information atoms 的格式和内容也是与解释此媒体数据流的media handler 密切相关的。其他的media handler不知道如何解释这些信息。

字段

长度(字节)

描述

尺寸

4

这个atom的字节数

类型

4

minf


mp4文件格式系列14 - Video Media Information Atoms
Video media information atoms是视频媒体的第一层atoms,包含其他的定义视频媒体数据的特性。
mp4文件格式系列15 - Sound Media Information Atoms
Sound media information atoms是音频媒体的第一层atoms,包含其他的定义音频媒体数据的特性。
mp4文件格式系列16 - Video Media Information Header Atoms

Video media information header atoms 定义颜色和图形模式信息。

mp4文件格式系列13-18

 

字段

长度(字节)

描述

尺寸

4

这个atom的字节数

类型

4

vmhd

版本

1

这个atom的版本

标志

3

这里总是0x000001

图形模式

2

The transfer mode. The transfer mode specifies which Boolean

operation QuickDrawshould performwhen drawing or transferring an image fromone location to another.

Opcolor

6

Three 16-bit values that specify the red, green, and blue colors for the transfer mode operation indicated in the graphics mode field.


17 - Sound Media Information Header Atoms - SMHD

The sound media information header atom定义了声音媒体的控制信息,例如均衡。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/455346.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

局域网网络风暴检测工具_【思唯网络学院】从原理到配置,最全的VLAN说明就在这了!...

有关VLAN的技术标准IEEE 802.1Q早在1999年6月份就由IEEE委员正式颁布实施了,而且最早的VLNA技术早在1996年Cisco(思科)公司就提出了。随着几年来的发展,VLAN技术得到广泛的支持,在大大小小的企业网络中广泛应用,成为当前最为热门的…

SQL server 基本语句

--查询数据库是否存在 if exists ( select * from sysdatabases where [name]TestDB) print Yes, the DB exists else print No, need a new one? --新建一个数据库 create database TestDB on ( name TestData, filename G:\DBS\KeyTest.mdf, size 3, filegrowth 2 ) log…

mp4格式

下面的软件下载地址:http://download.csdn.net/source/2607382 ftyp: 这是一个筐,可以装mdat等其他Box。 例:00 00 00 14 66 74 79 70 69 73 6F 6D 00 00 02 00 6D 70 34 31 语义为:ftyp: Major brand: isom Minor version: 5…

MongoDB的快速手动安装

就是关于MongoDB主从库的安装配置和启动。网上关于MongoDB的安装有大量的文章供大家学习。我这里提供一个Windows环境下MongoDB主从库的快速手动安装的方法,只需要三步即可。 先下载的安装包,解压缩后找到bin文件夹,将bin文件夹拷贝至你自己的…

时序图 分支_UML用例图

UML用例图用例图有以下东东:用例参与者关联系统边界用例使用椭圆来表示,椭圆里边写上用例的名称:这里的用例可以理解为一个动作或行为,或者一个对象。参与者用一个小人儿,在小人儿下面写上参与者名称,例如学生:关联用一条线表示:把很多个用例放到一个大的矩形框里。…

自定义封装 banner 组件

1. 效果图预览 2.基本功能 一个简单方便的轮播图组件,基于viewpager 基础上进行的封装。可设置 项目中图片,网络图片, View;支持循环自动播放,手势滑动切换,item点击事件,可设置 点点的样式宽高、颜色、大小…

vb.net服务器启动后cpu占用了70_记一次服务器被异常程序占用的解决过程(怀疑黑客攻击)...

最近在跑实验,但是突然发现程序运行变慢,然后top命令查看程序运行情况,发现有异常进程,名字叫 bash,占用 2400% CPU计算资源。刚开始怀疑是挖矿程序,因实验室网络IP为教育网公网,怀疑被攻击&…

3gp文件格式研究 (转windcao的专栏)

序言 06我开始做3gp文件的播放器,但是关于3gp的文档太少了也很难找,在网友luxh的帮助下,我终于有了第一份关于3gp文件格式的文档《ISO/IEC 14496-12,ISO媒体文件格式》.在此真心感谢luxh的贡献.当然了是英文版的,有文档就不错了.为了便于查阅和理解,我把之后陆续找…

yarn 怎么查看有多个job在跑_flink on yarn 模式下提示yarn资源不足问题分析

背景在实时计算平台上通过YarnClient向yarn上提交flink任务时一直卡在那里,并在client端一直输出如下日志:(YarnClusterDescriptor.java:1036)- Deployment took more than 60 seconds. Please check if the requested resources are available in the Y…

MPEG-2TS码流编辑的原理及其应用(转载

[作者:辽宁电视台 赵季伟] 在当今数字媒体不断发展、新媒体业务不断涌现 的前提下,实践证明襁褓中的新媒体只有两种经营方略可供选择:或是购买并集成整套节目,或是低成本深加工新节目,再不可能去按照传统生产模式…

FLV文件格式(Z)(转载)

刚才在看一些关于demux的东西,在处理flv格式的文件的时候,由于自己对flv文件的格式不了解,所以就比较云头转向,正好看到了一篇讲述flv文件格式的文章,写的比较明白,所以就转过来了。O(∩_∩)O~flv头文件比较…

mysql-5.7中的innodb_buffer_pool_prefetching(read-ahead)详解

一、innodb的read-ahead是什么: 所谓的read-ahead就是innodb根据你现在访问的数据,推测出你接下来可能要访问的数据,并把它们(可能要访问的数据)读入 内存。 二、read-ahead是怎么做到的: 1、总的来说read-ahead利用的是程序的局部…

mp4文件格式解析(一)

原文地址:mp4文件格式解析(一)作者:可下人间目前MP4的概念被炒得很火,也很乱。最开始MP4指的是音频(MP3的升级版),即MPEG-2 AAC标准。随后MP4概念被转移到视频上,对应的是…

shiro身份验证测试

2019独角兽企业重金招聘Python工程师标准>>> 一、登录验证 1、首先在shiro.ini里准备一些用户身份/凭据,后面这里会使用数据库代替,如: [users] [main] #realm jdbcRealmcom.learnging.system.shiro.ShiroRealm securityManager…

shell if多个条件判断_萌新关于Excel VBA中IF条件判断语句的一点心得体会

作者:金人瑞 《Excel VBA175例无理论纯实战教程》学员最近正在学习郑广学老师的VBA 175例教程,这是一篇新手向的文章,也是一个新手的总结,高手可以批评文章中的不足之处,也可以无视,VBA中的IF判断, 判断一般起到控制作…

编程语言难度排名_谷歌排名第一的编程语言,小学生拿来做答题,分分钟钟搞定高难度算法!...

点击上方蓝色文字关注我们吧谷歌排名第一的编程语言时什么?毫无疑问:肯定是 Python。 也难怪,作为大数据时代和人工智能时代的必备语言,Python 的优点太多了,语言简洁、易学、开发效率高、可移植性强...... 另外&#…

【转载】fullpage.js学习

参考网址:http://www.dowebok.com/77.html 上面有详细介绍及案例展示,很不错哦,可以先去看看demo 一、简介 fullPage.js 是一个基于jQuery的插件,它能够很方便、很轻松的制作出全屏网站,主要功能有: 1.支持…

webpack打包测试_webpack入门笔记(一)

webpack 是一个现代 JavaScript 应用程序的静态模块打包器(module bundler)。当 webpack 处理应用程序时,它会递归地构建一个依赖关系图(dependency graph),其中包含应用程序需要的每个模块,然后将所有这些模块打包成一个或多个 bundle。webp…

mysql中的内置函数

mysql内置函数列表可以从mysql官方文档查询,这里仅分类简单介绍一些可能会用到的函数。 1 数学函数 abs(x) pi() mod(x,y) sqrt(x) ceil(x)或者ceiling(x) rand(),rand(N):返回0-1间的浮点数,使用不同的seed N可以获得不同的随机数 round(x, D)&#xff…

使用 sitemesh/decorator装饰器装饰jsp页面(原理及详细配置)

摘要:首先这个Decorator解释一下这个单词:“装饰器”,我觉得其实可以这样理解,他就像我们用到的Frame,他把每个页面共有的东西提炼了出来,也可能我们也会用各种各样的include标签,将我们的常用页…