在本文中,您将了解媒体文件的基础知识(例如容器的概念),以及可用于流式传输的众多编解码器格式中的一些。此外,请略微介绍自适应流式传输、比特率和分辨率等主题,但在后面的部分中,我们将深入介绍所有这些内容。
投放视频文件
您可能会认为,您可以从摄像机拍摄原始文件,然后直接将其按原样上传到网络。事实上,YouTube 或 Vimeo 等视频在线播放网站可以做到这一点,甚至提供直播功能(通常是连接到相机的 HDMI 端口,然后通过拍摄卡进行处理)。这些服务极大地简化了视频处理和上传过程,包括生成自适应流式传输和各种分辨率所需的许多文件和清单。此外,还有许多其他复杂和精细的要求,使得自托管变得有些繁琐。如果您非常关心用户的网站使用体验,那么从您自己的网站(可能是单独的媒体服务器)准备和投放视频会比仅上传原始相机文件更复杂一些。
视频文件有多种格式。相机生成的格式通常是 .mov
文件,如果您有性能出色的现代无反光相机,则格式是 .mp4
。但是,虽然 .mov
适用于录制和编辑和其他早期后期制作流程,但文件大小意味着它不适合通过网络在线播放。此外,4K 原始 .mp4
的文件大小也会导致在移动设备上播放该文件变得非常困难。由于浏览器支持的文件格式不同,因此,如果您计划支持自适应流式传输,则需要创建多个优化文件,还可能创建一个清单。在转换文件之前,您需要了解一些关于文件及其特性的基本知识。
容器、编解码器和视频流?
您在操作系统 shell 中看到的文件是一个容器,由文件扩展名(.mp4
、.webm
、.ogg
等)标识。容器存放一个或多个数据流。一个媒体文件可包含任意数量的流,其格式比我们在此讨论的要多。
本部分稍后使用的示例文件最多包含两个流:音频流和视频流。您可能遇到的其他类型包括图片说明和数据,两者都不在本文的讨论范围内。在某些情况下,音频流和视频流是分开处理的。您遇到的大多数文件将只包含一个音频流和一个视频流。
在音频流和视频流中,实际数据使用编解码器压缩。编解码器(即编码器/解码器)是视频或音频数据的压缩格式。容器和编解码器之间的区别非常重要,因为对于具有相同容器的文件,其内容可以使用不同的编解码器进行编码。
下图说明了此结构。左侧是包含两个数据流的基本容器结构。右侧是单个 WebM 文件的结构细节。
![将媒体文件结构与假设的媒体文件进行比较。](https://web.developers.google.cn/static/articles/media-file-basics/image/comparing-media-file-stru-58d7e1713333f.png?authuser=5&hl=sv)
WebM 容器中的文件比其他格式要小几个数量级,因此非常适合移动网站进行流式传输。遗憾的是,并非所有浏览器都支持最新的容器和编解码器。例如,WebM 是专为 Web 而打造的优质开源选项,但其支持尚不具备通用性。尤其是,根据在撰写本文时可以使用 WebM 的情况,Safari 不支持将 WebM 用于嵌入式视频。不过,WebM 对 WebRTC 中使用的 VP8 和 VP9 编解码器提供部分支持。因此,最好的选择是提供后备视频
编解码器格式
许多文件类型都支持在同一容器中使用多个编解码器。可用视频编解码器和音频编解码器的完整列表是一个完整的网站。上述链接适用于 MDN 中实用的 Web 内容列表。 下面列出了当前首选的文件类型以及它们可能使用的编解码器。 点击文件类型链接即可查看支持相应文件类型的浏览器。
文件类型 | 视频编解码器 | 音频编解码器 |
---|---|---|
MP4 | AV1、AVC (H.264)*、VP9 | AAC |
WebM | AV1、VP9* | Vorbis、Opus |
* 表示首选视频编解码器。
比特率和分辨率
比特率是用于对流的一秒进行编码所用的最大位数。用于对一秒流进行编码的位越多,潜在细节和保真度就越高。如需详细了解此概念,请参阅比特率。
分辨率是单个视频帧中的信息量,以每个维度中的逻辑像素数表示。我们在解决方案中提供了有关此概念的更多信息。
接下来,在媒体应用基础知识中,我们将介绍如何使用以下两种命令行工具检查这些特性:Shaka Packager 和 FFmpeg。