媒体文件基础知识

在本文中,您将了解媒体文件基础知识,例如容器的概念,以及您可以在流中使用的几种可用编解码器格式。此外,还会简单介绍自适应流式传输、比特率和分辨率等主题,但我们将在后面的章节中更深入地探讨所有这些内容。

提供视频文件

您可能会认为,您可以从摄像机中获取原始文件,然后按原样上传到网络。实际上,YouTube 或 Vimeo 等视频流媒体网站允许您这样做,甚至提供直播功能——通常通过连接到摄像机的 HDMI 端口,然后通过采集卡进行处理。这些服务大大简化了视频处理和上传,其中包括生成自适应流式传输和各种分辨率所需的许多文件和清单。此外,还有许多其他复杂而细致的要求,使得自行托管有点麻烦。如果您关心用户体验您的网站,那么从您自己的网站(可能还有单独的媒体服务器)准备和提供视频比仅上传原始摄像机文件要复杂一些。

视频文件有多种格式。从您的相机中导出的格式通常是 .mov 文件,如果您有现代化的无反相机,则可能是 .mp4 文件。但是,虽然 .mov 格式适用于录制以及编辑和其他早期后期制作过程,但文件大小意味着它不适合在网络上流式传输。同样,4K 原始 .mp4 文件的文件大小将使在移动设备上播放该文件非常困难。由于浏览器支持不同的文件格式,如果您计划支持自适应流式传输,则需要创建多个优化的文件,并可能需要清单。在转换文件之前,您需要了解一些关于文件及其特性的基础知识。

容器、编解码器和流?

您在操作系统 shell 中看到的文件是一个容器,由文件扩展名(.mp4.webm.ogg 等)标识。容器包含一个或多个。一个媒体文件可以有任意数量的流,其格式比我们在此处介绍的要多得多。

本节稍后使用的示例文件最多包含两个流:音频流和视频流。您可能会遇到的其他类型包括字幕和数据,这两者都超出了本文的范围。在某些情况下,音频流和视频流是分开处理的。您遇到的大多数文件将仅包含单个音频流和单个视频流。

在音频和视频流中,实际数据使用编解码器进行压缩。编解码器(或编码器/解码器)是视频或音频数据的压缩格式。容器和编解码器之间的区别很重要,因为具有相同容器的文件可以使用不同的编解码器对其内容进行编码。

下图说明了这种结构。左侧是具有两个流的基本容器结构。右侧是单个 WebM 文件的该结构的详细信息。

Comparing media file structure with a hypothetical media file.
媒体文件的组成部分。

WebM 容器中的文件可能比其他格式小几个数量级,这使其成为移动网站流式传输的理想选择。遗憾的是,并非所有浏览器都支持最新的容器和编解码器。例如,WebM 专门为 Web 创建,作为一种高质量和开源的选择,但其支持尚未普及。根据撰写本文时的 Can I use,特别是 Safari 不支持嵌入式视频的 WebM。但是,WebM 通过 WebRTC 中使用的 VP8 和 VP9 编解码器提供部分支持。因此,您的最佳选择是提供备用视频。

编解码器格式

许多文件类型在同一容器中支持多种编解码器。可用的视频编解码器音频编解码器的完整列表本身就是一个完整的网站。刚刚提供的链接指向 MDN 关于 Web 上可用的实用列表。下面列出了当前首选的文件类型,以及它们可能使用的编解码器。点击文件类型链接可查看支持它们的浏览器。

文件类型 视频编解码器 音频编解码器
MP4 AV1AVC (H.264)*、VP9 AAC
WebM AV1VP9* VorbisOpus

* 表示首选视频编解码器。

比特率和分辨率

比特率是用于编码流的每秒钟的最大比特数。用于编码流的每秒钟比特数越多,潜在的细节和保真度就越高。我们在比特率中提供了有关此概念的更多信息。

分辨率是视频单帧中的信息量,以每个维度中的逻辑像素数表示。我们在分辨率中提供了有关此概念的更多信息。

接下来,在媒体应用基础知识中,我们将向您展示如何使用两个命令行工具:Shaka Packager 和 FFmpeg 来检查这些特性。