媒体文件基础知识

德里克·赫尔曼
Derek Herman
Joe Medley
Joe Medley

在本文中,您将了解媒体文件的基础知识(例如容器的概念),以及可用于流式传输的众多编解码器格式中的一些。此外,请略微介绍自适应流式传输、比特率和分辨率等主题,但在后面的部分中,我们将深入介绍所有这些内容。

投放视频文件

您可能会认为,您可以从摄像机拍摄原始文件,然后直接将其按原样上传到网络。事实上,YouTubeVimeo 等视频在线播放网站可以做到这一点,甚至提供直播功能(通常是连接到相机的 HDMI 端口,然后通过拍摄卡进行处理)。这些服务极大地简化了视频处理和上传过程,包括生成自适应流式传输和各种分辨率所需的许多文件和清单。此外,还有许多其他复杂和精细的要求,使得自托管变得有些繁琐。如果您非常关心用户的网站使用体验,那么从您自己的网站(可能是单独的媒体服务器)准备和投放视频会比仅上传原始相机文件更复杂一些。

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

容器、编解码器和视频流?

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

本部分稍后使用的示例文件最多包含两个流:音频流和视频流。您可能遇到的其他类型包括图片说明和数据,两者都不在本文的讨论范围内。在某些情况下,音频流和视频流是分开处理的。您遇到的大多数文件将只包含一个音频流和一个视频流。

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

下图说明了此结构。左侧是包含两个数据流的基本容器结构。右侧是单个 WebM 文件的结构细节。

将媒体文件结构与假设的媒体文件进行比较。
媒体文件的组成部分。

WebM 容器中的文件比其他格式要小几个数量级,因此非常适合移动网站进行流式传输。遗憾的是,并非所有浏览器都支持最新的容器和编解码器。例如,WebM 是专为 Web 而打造的优质开源选项,但其支持尚不具备通用性。尤其是,根据在撰写本文时可以使用 WebM 的情况,Safari 不支持将 WebM 用于嵌入式视频。不过,WebM 对 WebRTC 中使用的 VP8 和 VP9 编解码器提供部分支持。因此,最好的选择是提供后备视频

编解码器格式

许多文件类型都支持在同一容器中使用多个编解码器。可用视频编解码器音频编解码器的完整列表是一个完整的网站。上述链接适用于 MDN 中实用的 Web 内容列表。 下面列出了当前首选的文件类型以及它们可能使用的编解码器。 点击文件类型链接即可查看支持相应文件类型的浏览器。

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

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

比特率和分辨率

比特率是用于对流的一秒进行编码所用的最大位数。用于对一秒流进行编码的位越多,潜在细节和保真度就越高。如需详细了解此概念,请参阅比特率

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

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