整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

为HTML页面添加视频、音频的方法-零基础自学网页制作

频、视频的格式

开始学习之前,我们要下载些素材用来测试使用,地址如下:https://pan.baidu.com/s/1reRWno0ibYRcYXjw4MClqw

提取码:td80

其中包括两个视频一个音频和一个安装程序。

学习如何在页面中添加音频、视频之前应该了解一点基础知识。

我们应该都有在互联网上下载电影、视频、音乐的经历,大家会注意到,有的视频文件名的后缀是.avi,有的视频是.mp4,还有.mov的,据不完全统计,常见的各种视频格式有十几种之多。

常见的音频的格式比起视频来会显得少一些,一般是.wav和.mp3格式。

为什么存储相同的内容可以有这么多不同的格式呢?

格式产生的核心在于对音频、视频等多媒体文件进行的不同编码方式。

那什么是编码呢?

简单来说我们可以把"编码"这个词分成两个部分,第一个是"编",也就是"整理、组织"的意思,第二个是"码",也就是我们平时所说的"数码"。

首先说"码",我们的计算机中的数据最终都是通过二进制的数字(0和1)来存储或计算的,这些0或1就是数码。无论代码、程序、图片、音乐、视频、文字等的存储与计算都不例外。不管多么复杂或简单的文件,在计算机看来,都是一大堆0和1。

一个0或1被称为1比特,图片或视频中的一个黑白像素通常是8比特(八位),如果一张1080乘720个像素的图片所占内存的大小就是1080*720*8=6220800字节,约等于0,74mb。如果一个视频每秒中有25帧,也就是一秒钟在我们眼前闪过25张图片(视频播放实际上就是在我们眼前快速的更替图片,这些图片在大脑中会被自动连成动作,这也是小的时候在课本的角上画好一套走路的小人的不同动作后,快速翻动书页,画面中的小人会走路的原因,大家可以自行百度"视觉暂留原理")。

一秒钟25张1080乘720的图片的视频,一秒钟就会占0.74*25=18.5mb的内存。如果是一分钟呢,18.5*60=1110mb约等于1.08gb。这样的数据量是不是很吓人。

但事实上我们下载的1080*720的一小时三十分钟左右的视频的体积往往也没有超过1gb,这又是为什么呢?

这就是"编"的功劳!对数码进行整理和组织的主要目的是压缩体积,压缩数据体积既能节省磁盘又能方便传播与携带,是信息技术的关键技术之一,压缩的方法一般有两类,一类叫做无损压缩,也就是通过对这一大堆数码进行一个特殊的组合使其占有更小的空间,一类叫做有损压缩,是在无损压缩的基础上剔除掉人眼睛识别不到的冗余信息。具体的压缩过程涉及到很多数学知识,这里大家简单了解一下即可。

压缩后的视频或音频文件最终通过播放器对该文件的压缩算法进行逆向运算后,还原成计算机可以解读的画面和声音再呈现给观众,这个过程叫做"解码"。

通过"编"的方式压缩文件体积,通过"解"的方式再还原出文件内容成了处理大规模数据的通用手法。

不同的编码和解码方式催生出不同的文件格式,这种情况下,浏览器在播放视频的时候就要有应对不同格式的不同解码方式,在15年以前,浏览器为了能够播放不同格式的视频,就要调用电脑中不同的播放器,这个过程的写法非常麻烦。随着技术不断地整合,时至今日,在页面中播放视频不需要这么复杂的写法了,但是因为每个浏览器都不是包打一切,因此,虽然不用指定播放器,但是也要预设不同格式的视频来应对不同的浏览器。

因此,我们在这一部分的学习中除了讲解如何向页面添加不同格式的音视频外还会告诉大家如何为音视频转换格式。

为页面添加音频、视频

添加音频使用<audio></audio>标签,这个标签被所有浏览器支持,是html5推荐的音频导入标签,但是遗憾的是在html4标准中是不被支持的或者说是非法的。

这里给大家简要介绍一下html5和html4的区别。

简单来说呢,一个html文件的第一条语句是<!DOCTYPE HTML>,它就是HTML5标准的文件。如果是html4,它的第一条声明语句有三种写法,像这样

一:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

二:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

三:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd">

版权声明:本文为CSDN博主「痦子」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/yh1061632045/article/details/81518141

这让我想到了孔乙己的"茴"字的多种写法

是不是很麻烦,其实html5比html4更简单,功能更强大,而且我们一直以html5的标准进行学习,所以大家不必纠结。

下面我们导入一个音频试试吧。示例代码如下:

<!DOCTYPE HTML>
  <html>
  <head> 
  <title>音视频导入</title>
  </head> 
  <body>
  <audio controls="controls"> 
    <source src="audio/千年的祈祷.mp3" type="audio/mp3" />
  </audio>
  </body> 
  </html>

页面效果如下:

其中controls属性就是用来显示播放控制界面的,就是这个:(偷懒的话可以写成"controls"就ok,不必加"="以及后面的内容了。)

如果以后您使用自己编写的控制界面,就可以不添加这个属性。

删掉这个属性后就是这样:这样为自定义的播放控制界面留出了位置。

<audio></audio>标签夹着<source>标签,一个<audio></audio>标签中可以添加多个<source>用以支持不同的格式要求。示例代码如下:(这段代码来自w3school)

<audio controls="controls"> 
  <source src="song.ogg" type="audio/ogg" /> 
  <source src="song.mp3" type="audio/mpeg" />
  Your browser does not support the audio element.<!--你的浏览器不支持这个音频元素-->
</audio>

type属性是告诉浏览器音乐文件的类型。

不同格式的文件的生成需要我们自己去做,这就涉及到如何给一个音频文件进行格式转化的问题。这个问题我们明天再说,今天先学习为页面添加音频和视频。

下面我们来看一下视频的导入方法,示例代码如下:

<video controls> 
  <source src="video/阿塔丽.mp4" type="video/mp4" />
</video>

页面效果如下:

我们可以通过设置height和width属性来控制视频的面积。实例代码如下:

<video controls width="850" height="500" > 
  <source src="video/阿塔丽.mp4" type="video/mp4" />
</video>

页面效果如下:

视频画面变小了,和视频并排的是我们之前添加的音频文件,由此可知,这两个元素都是内联元素。

今天的内容结束了,明天我们继续学习格式转换和为不同浏览器预设不同音视频格式的方法。

如果您有任何疑问请给我留言,如有问题或错误请予以斧正!

HTML完整学习目录

HTML序章(学习目的、对象、基本概念)——零基础自学网页制作

HTML是什么?——零基础自学网页制作

第一个HTML页面如何写?——零基础自学网页制作

HTML页面中head标签有啥用?——零基础自学网页制作

初识meta标签与SEO——零基础自学网页制作

HTML中的元素使用方法1——零基础自学网页制作

HTML中的元素使用方法2——零基础自学网页制作

HTML元素中的属性1——零基础自学网页制作

HTML元素中的属性2(路径详解)——零基础自学网页制作

使用HTML添加表格1(基本元素)——零基础自学网页制作

使用HTML添加表格2(表格头部与脚部)——零基础自学网页制作

使用HTML添加表格3(间距与颜色)——零基础自学网页制作

使用HTML添加表格4(行颜色与表格嵌套)——零基础自学网页制作

16进制颜色表示与RGB色彩模型——零基础自学网页制作

HTML中的块级元素与内联元素——零基础自学网页制作

初识HTML中的<div>块元素——零基础自学网页制作

在HTML页面中嵌入其他页面的方法——零基础自学网页制作

封闭在家学网页制作!为页面嵌入PDF文件——零基础自学网页制作

HTML表单元素初识1——零基础自学网页制作

HTML表单元素初识2——零基础自学网页制作

HTML表单3(下拉列表、多行文字输入)——零基础自学网页制作

HTML表单4(form的action、method属性)——零基础自学网页制作

HTML列表制作讲解——零基础自学网页制作

为HTML页面添加视频、音频的方法——零基础自学网页制作

音视频格式转换神器与html视频元素加字幕——零基础自学网页制作

HTML中使用<a>标签实现文本内链接——零基础自学网页制作

览器解析HTML文件的过程是网页呈现的关键步骤之一。具体介绍如下:


HTML文档的接收和预处理

  1. 网络请求处理:当用户输入URL或点击链接时,浏览器发起HTTP请求,服务器响应并返回HTML文件。此过程中,浏览器需要处理DNS查询、建立TCP连接等底层网络通信操作。
  2. 预解析优化:为了提高性能,现代浏览器在主线程解析HTML之前会启动一个预解析线程,提前下载HTML中链接的外部CSS和JS文件。这一步骤确保了后续渲染过程的顺畅进行。

解析为DOM树

  1. 词法分析和句法分析:浏览器的HTML解析器通过词法分析将HTML文本标记转化为符号序列,然后通过句法分析器按照HTML规范构建出DOM树。每个节点代表一个HTML元素,形成了多层次的树状结构。
  2. 生成对象接口:生成的DOM树是页面元素的结构化表示,提供了操作页面元素的接口,如JavaScript可以通过DOM API来动态修改页面内容和结构。

CSS解析与CSSOM树构建

  1. CSS文件加载与解析:浏览器解析HTML文件中的<link>标签引入的外部CSS文件和<style>标签中的内联CSS,生成CSSOM树。CSSOM树反映了CSS样式的层级和继承关系。
  2. CSS属性计算:包括层叠、继承等,确保每个元素对应的样式能够被准确计算。这些计算过程为后续的布局提供必要的样式信息。

JavaScript加载与执行

  1. 阻塞式加载:当解析器遇到<script>标签时,它会停止HTML的解析,转而先加载并执行JavaScript代码。这是因为JS可能会修改DOM结构或CSSOM树,从而影响已解析的部分。
  2. 异步和延迟加载:为了不影响页面的初步渲染,可以采用async或defer属性来异步加载JS文件,这样可以在后台进行JS的加载和执行,而不阻塞HTML解析。

渲染树的构建

  1. 合并DOM树和CSSOM树:有了DOM树和CSSOM树后,浏览器将它们组合成渲染树,这个树只包含显示界面所需的DOM节点及对应的样式信息。
  2. 不可见元素的排除:渲染树会忽略例如<head>、<meta>等不可见元素,只关注<body>内的可视化内容。

布局计算(Layout)

  1. 元素位置和尺寸确定:浏览器从渲染树根节点开始,递归地计算每个节点的精确位置和尺寸,这个过程也被称为“回流”或“重排”,是后续绘制的基础。
  2. 布局过程的优化:现代浏览器会尽量优化布局过程,例如通过流式布局的方式减少重复计算,确保高效地完成布局任务。

绘制(Paint)

  1. 像素级绘制:绘制是一个将布局计算后的各元素绘制成像素点的过程。这包括文本、颜色、边框、阴影以及替换元素的绘制。
  2. 层次化的绘制:为了高效地更新局部内容,浏览器会将页面分成若干层次(Layer),对每一层分别进行绘制,这样只需更新变化的部分。

因此,我们开发中要注意以下几点:

  • 避免过度使用全局脚本:尽量减少使用全局脚本或者将它们放在文档底部,以减少对HTML解析的阻塞。
  • 合理组织CSS和使用CSS预处理器:合理组织CSS文件的结构和覆盖规则,利用CSS预处理器进行模块化管理。
  • 利用浏览器缓存机制:通过设置合理的缓存策略,减少重复加载相同资源,提升二次访问的体验。
  • 优化图片和多媒体资源:适当压缩图片和优化多媒体资源的加载,减少网络传输时间和渲染负担。

综上所述,浏览器解析HTML文件是一个复杂而高度优化的过程,涉及从网络获取HTML文档到最终将其渲染到屏幕上的多个步骤。开发者需要深入理解这些步骤,以优化网页性能和用户体验。通过合理组织HTML结构、优化资源加载顺序、减少不必要的DOM操作和合理安排CSS和JavaScript的加载与执行,可以显著提升页面加载速度和运行效率。

我们开发Web应用的时候,会用到大量的js、css、image、html等静态资源资源。

静态资源映射


默认情况下,我们只需要将静态资源放在一下几个目录中就可以直接通过url在浏览器中访问了。

  • /META-INF/resources/
  • /resources/
  • /static/
  • /public/

如果这四个目录中有相同的静态资源文件,那么优先访问哪个目录下面的资源啊?

静态资源的默认访问优先级:/META-INF/resources/>/resources/>/static/>/public/

在四个目录中都放一个static.html的文件,每个html文件中都说明自己所在的目录,访问结果如下:

SpringBoot关于静态资源的访问涉及到了application.properties中的两个属性:

# 默认值为 /*
spring.mvc.static-path-pattern= #这里设置静态资源匹配的url-pattern
# 默认值为 classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/ 
spring.resources.static-locations= #这里设置要指向的路径,多个使用英文逗号隔开,在前面的优先级高

此时,我们豁然开朗,知道默认情况下静态资源为什么放在/META-INF/resources/、/resources/、/static/、/public/这四个目录了,还有这四个目录访问的优先级是怎么来的了。

修改静态资源映射的方法:

  • 我们可以修改这两个属性来改变静态资源的映射,比如我们的所有静态资源都在mystatic目录中,并且我们希望访问静态资源的的url都带有/mystatic/这个目录前缀:
spring.mvc.static-path-pattern=/mystatic/*
spring.resources.static-locations= classpath:mystatic/

在resources资源目录中创建一个mystatic目录,在该目录下面创建一个static.html文件,访问结果如下:

  • 继承WebMvcConfigurerAdapter类,并且重写addResourceHandlers方法就行,该操作与上面的方法得到的效果是一样的


注意:还可以设置外部磁盘目录,设置方式不变,格式如下:file:d/mystatic/。

WebJars


WebJars将前端资源(css,js,image,html等等)打包到jar中,然后使用基于JVM的包管理器(比如 Maven、Gradle 等)管理前端依赖的方案。SpringBoot中也可以通过WebJars来访问静态资源。

SpringBoot默认将/webjars/**映射到 classpath:/META-INF/resources/webjars/。

  • /webjars/**:表示/webjars/目录下的所有文件,及存在其目录下的jar包中的所有文件。

所以默认情况下我们需要访问WebJars中的资源,需要将其jar包放到classpath:/META-INF/resources/webjars/目录中。

我们来使用一下WebJars:

  • 在pom.xml中引入jquery的WebJars,默认会被放在classpath:/META-INF/resources/webjars/目录中
 <dependency>
 <groupId>org.webjars</groupId>
 <artifactId>jquery</artifactId>
 <version>2.1.1</version>
 </dependency>
  • 在前端webjars.html页面中引入jquery
<script src="/webjars/jquery/2.1.1/jquery.js"></script>
  • 访问页面webjars.html,查看源码,可以链接到jquery.js的内容


版本号统一管理


如果我们有很多页面都是用了WebJars中的资源,而我们现在要升级WebJars的版本,岂不是要在每个页面中都改动一下,这样很麻烦啊,有没有简单的方法啊。此时,我们可以进行版本号统一管理。

  • 在pom.xml中引入jquery的WebJars的基础上添加:
 <dependency>
 <groupId>org.webjars</groupId>
 <artifactId>webjars-locator</artifactId>
 </dependency>
  • 添加版本号统一管理的控制器


  • 在页面中引入jquery的方式如下:
<script src="/webjarslocator/jquery/jquery.js"></script>

静态资源版本管理


当我们资源内容发生变化时,由于浏览器缓存,用户本地的静态资源还是旧的资源,为了防止这种情况导致的问题,我们可能会手动在请求url的时候加个版本号或者其他方式。

<script type="text/javascript" src="/lavor.js?v=1.1"></script>

SpringMVC提供了两种方式可以帮助我们很容易地解决这类问题。

MD5方式


  • 修改application.properties配置文件
spring.resources.chain.strategy.content.enabled=true
spring.resources.chain.strategy.content.paths=/**
  • 添加@ControllerAdvice注解,返回ResourceUrlProvider的对象,这样所有通过控制器返回的模板页面(jsp,thymeleaf,freeemarker等)就都可以在页面中使用该对象了


  • 在控制器返回的模板页面中,添加以下信息,我们这里的返回页面时jsp页面,lavor.js是webapp目录下面的js脚本文件。
<script src="${urls.getForLookupPath('/lavor.js') }"></script>
  • 通过浏览器访问控制器的请求url,查看页面源代码
<script src="/lavor-fdfa0502716d517c6cad4f2536aa02a1.js"></script>

请求/lavor-fdfa0502716d517c6cad4f2536aa02a1.js,我们MD5配置的paths=/**,所以SpringMVC会尝试url中是否包含-,如果包含会去掉后面这部分,然后去映射的目录(如webapp根目录,上面提到的四大静态映射目录)查找/lavor.js文件,如果能找到就返回。

版本号方式


  • 修改application.properties配置文件,注意MD5方式中的是content,这里是fixed
spring.resources.chain.strategy.fixed.enabled=true
#版本号处理的路径
spring.resources.chain.strategy.fixed.paths=/**
# 版本号,可以为所处理路径中的资源加上/v1.1目录前缀
spring.resources.chain.strategy.fixed.version=v1.1
  • 添加@ControllerAdvice注解,返回ResourceUrlProvider的对象,这样所有通过控制器返回的模板页面(jsp,thymeleaf,freeemarker等)就都可以在页面中使用该对象了


  • 在控制器返回的模板页面中,添加以下信息,我们这里的返回页面时jsp页面,lavor.js是webapp目录下面的js脚本文件.
<script src="${urls.getForLookupPath('/lavor.js') }"></script>
  • 通过浏览器访问控制器的请求url,查看页面源代码
<script src="/v1.1/lavor.js"></script>

请求/v1.1/lavor.js,会查看v1.1是不是版本号,如果是就去掉前缀目录,直接查找/lavor.js。

注意:我们发现如果添加了webapp目录,那么该目录也可以存放静态资源,并且默认情况下访问优先级比/META-INF/resources/还要高。