Flash 十多年来为数十亿用户提供视频、动画、交互式网站以及广告,但 现在它将退出历史舞台。Adobe 将于 2020 年停止对 Flash 的支持。Firefox 不再默认支持 Flash,Chrome 也不支持。那么接下来该怎么办?有很多开放标准可以实现 Flash 的功能,而且功能更强大。
真正开放的媒体
Flash 承诺提供一个统一的平台来构建和发布交互式多媒体网站。而且在很大程度上,它也做到了。但是这项技术从来就不是真正开放和可访问的,而且 Flash Player 对于移动设备来说过于消耗资源。现在,开源替代方案可以实现 Flash 的所有功能,甚至更多。如果您认真考虑构建未来的交互式网络,那么应该学习这些技术,无论您是做网页动画、游戏 还是 视频。
网页动画
CSS
CSS 动画 是一项相对较新的技术,但它是开始网页动画的最简单方式。CSS 用于通过一些基本的规则来设计网站,这些规则规定了布局、排版、颜色等等。随着 CSS3 的发布,动画现在已成为标准的一部分,作为开发人员,您需要告诉浏览器如何进行动画。CSS 是人类可读的,这意味着它基本上按照字面意思执行操作。例如,属性 "animation-direction" 恰如其分地指定了动画的方向。
现在您可以使用 CSS 创建流畅、无缝的动画。创建 关键帧、调整时间、对不透明度进行动画处理等等,这些操作都很简单。所有动画都适用于您使用 CSS 设置样式的任何对象:文本、图像、容器等等。
即使您不熟悉编程语言,也可以使用 CSS 进行动画制作。与许多开源项目一样,可以在网上找到您可以随意使用的代码。Mozilla 还创建了(并维护着)详尽的 CSS 动画文档。大多数开发人员建议将 CSS 动画用于简单的项目,而将 JavaScript 用于更复杂的网站。
JavaScript
从早期开始,开发人员就一直在使用 JavaScript 进行动画制作。基本的鼠标悬停脚本已经存在超过 20 年,而如今 JavaScript 以及 HTML5 的 <canvas> 元素可以完成一些非常惊人的事情。即使是简单的脚本也可以产生出色的效果。使用 JavaScript,您可以绘制形状、更改颜色、移动和更改图像,以及对透明度进行动画处理。JavaScript 动画使用 SVG(可缩放矢量图形)格式进行动画制作,这意味着插图实际上是基于数学实时绘制的,而不是加载和渲染。这意味着它们在任何比例下都能保持清晰(因此得名),并且可以完全控制。SVG 提供了抗锯齿渲染、图案和渐变填充、复杂的滤镜效果、根据任意路径进行裁剪、文本和动画。当然,它还是一个开放标准的 W3C 建议,而不是封闭的二进制文件。使用 SVG、JavaScript 和 CSS3,开发人员可以创建 令人印象深刻的交互式动画,而无需任何专门的格式或播放器。
JavaScript 动画可以非常精致,包括反弹、停止、暂停、倒带或减速。它也是交互式的,可以编程为响应鼠标点击和悬停。新的 Web 动画 API(使用 JavaScript 构建)可以让您更精细地调整动画,并对关键帧和元素有更多控制权,但它还处于早期实验阶段,某些功能可能不受所有浏览器支持。
此外,JavaScript 动画可以编程为响应输入字段、表单提交和按键。这使其非常适合构建网页游戏。
网页游戏
曾经有一段时间,Flash 是网页游戏的统治者。它易于学习、使用和分发。它也十分强大,能够向数百万用户提供大型多人在线游戏。但如今,可以使用 JavaScript、HTML5、WebGL 和 WebAssembly 来提供相同甚至更好的体验。借助现代浏览器和开源框架,可以构建 3D 动作射击游戏、RPG 游戏、冒险游戏等等。事实上,您现在甚至可以使用 WebVR 和 A-Frame 等技术为网页创建完全沉浸式的虚拟现实体验。
网页游戏依赖于一个由开源框架和平台组成的生态系统来运行。从视觉效果到控件,再到音频和网络,每个组件都扮演着重要角色。Mozilla 开发者网络有一份 关于目前正在使用的技术的完整列表。以下是其中一些技术及其用途:
WebGL
让您可以从 Web 内容创建高性能、硬件加速的 3D(和 2D)图形。这是 Web 支持的 OpenGL ES 2.0 实现。WebGL 2 甚至更进一步,在浏览器中实现了 OpenGL ES 3.0 级别的支持。
JavaScript
JavaScript 是在 Web 上使用的编程语言,它在浏览器中运行良好,并且速度越来越快。它已经用于构建数千款游戏,并且不断开发新的游戏框架。
HTML 音频
您可以使用 <audio> 元素轻松播放简单的音效和音乐。如果您的需求更加复杂,请查看 Web 音频 API,它提供了真正的音频处理能力!
Web 音频 API
这个用于控制从 JavaScript 代码播放、合成和操作音频的 API 让您能够创建出色的音效,以及实时播放和操作音乐。
WebSockets
WebSocket API 让您可以将应用程序或网站连接到服务器,以便实时传输数据。非常适合多人回合制或基于事件的游戏、聊天服务等等。
WebRTC
WebRTC 是一款超快的 API,可用于视频聊天、语音通话和 P2P 文件共享 Web 应用程序。它可以用于需要低延迟的实时多人游戏。
WebAssembly
HTML5/JavaScript 游戏引擎比以往任何时候都更好,但它们仍然无法与原生应用程序的性能相提并论。 WebAssembly 有望为 Web 应用程序带来接近原生的性能。这项技术 让浏览器能够运行编译后的 C/C++ 代码,包括使用 Unity 和 Unreal 等引擎制作的游戏。
有了 WebAssembly,网页游戏将能够 利用多线程。开发人员将能够为 Web 制作令人惊叹的 3D 游戏,其运行速度接近原生代码,但不会影响安全性。这对游戏来说是一个巨大的突破,也是对开放网络的巨大突破。这意味着开发人员将能够为任何能够访问 Web 的计算机或系统构建游戏。由于它们将在浏览器中运行,因此可以轻松地集成在线多人模式。
此外,还有许多 HTML5/JavaScript 游戏引擎。这些引擎负责处理物理和控制等基础知识,为开发人员提供一个框架/世界来构建。它们从像 atom 和 Quick 这样的轻量级、快速 2D 引擎,到像 WhitestormJS 和 Gladius 这样的功能齐全的 3D 引擎,应有尽有。您可以从数十种引擎中选择,每种引擎都为开发人员提供了独特优势和劣势。但最终,它们都能够生成可以在现代 Web 浏览器中无需插件就能玩的游戏。而且大多数游戏都可以在性能较低的硬件上运行,这意味着您可以触达更多用户。事实上,为 Web 编写的游戏可以在平板电脑、智能手机,甚至智能电视上运行。
MDN 提供了 有关构建网页游戏的详细文档,以及使用 纯 JavaScript 和 Phaser 游戏框架 构建游戏的多个教程。它是开始进行 Web 游戏开发的绝佳起点。
视频
大多数视频服务已经切换到使用 Web 技术和开放编解码器的基于 HTML5 的流媒体;其他服务仍在使用 基于 Flash 的 FLV 或 FV4 编解码器。如前所述,Flash 视频格式依赖于软件渲染,这会给 Web 浏览器和移动平台带来负担。现代视频编解码器可以使用硬件渲染来播放视频,从而大大提高响应速度和效率。不幸的是,从 Flash 切换到 HTML5 只有一个方法:重新编码您的视频。这意味着通过像 FFmpeg 和 Handbrake 这样的免费转换器将您的源素材转换为 HTML5 友好的格式。
Mozilla 正在积极帮助构建和改进 HTML5 友好且 开源视频格式 WebM。它基于 Matroska 容器,并使用 VP8 和 VP9 视频编解码器以及 Vorbis 或 Opus 编解码器。
将您的媒体转换为 HTML5 友好的格式后,您就可以将视频重新发布到您的网站上。HTML5 内置了媒体控件,因此无需安装任何播放器。这很简单。只需使用一行 HTML 代码
<video src="videofile.webm" controls></video>
请记住,原生控件在不同浏览器之间并不一致。但是,由于它们是用 HTML5 制成的,因此您可以使用 CSS 自定义它们 并使用 JavaScript 将它们链接到您的视频。这意味着您可以构建可访问性,添加自己的品牌,并保持不同浏览器之间外观的一致性。
HTML5 还可以使用 媒体源扩展 (MSE) 处理自适应流。虽然它们可能难以独立设置,但您可以使用 预先打包的播放器,例如 Shaka 播放器 和 JW 播放器 来处理细节。
MDN 的开发人员创建了一个关于 将 Flash 视频转换为 HTML5 视频的详细指南,其中包含更多关于此过程的详细信息。幸运的是,它并没有看起来那么难。
Flash 前进
网络的未来是开放的(希望如此),而 Flash 尽管对于创意人员来说是一个很棒的工具,但不够开放。值得庆幸的是,许多开源工具可以完成 Flash 的功能,甚至更多。但我们仍处于早期阶段,创建动画、交互式网站和网络游戏需要 一些编码知识。您需要了解的一切都已存在,只等您去学习。
开放式 Web 技术有望比 Flash 更好,并将为任何有互联网连接的人提供服务。
关于 Dustin Driver
记者、技术作家和视频制作人,帮助 Mozilla 保持 Web 对所有人开放和可访问。
3 评论