媒体文件基础知识

Derek Herman
Derek Herman
Joe Medley
Joe Medley

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

投放视频文件

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

视频文件有多种格式。相机拍摄的照片通常为 .mov 文件,如果您使用的是新型高端无反光镜相机,则为 .mp4。不过,虽然 .mov 适合录制、编辑和其他后期制作流程,但由于文件大小较大,因此不适合在网络上进行在线播放。此外,4K 原始 .mp4 的文件大小将使其在移动设备上播放变得非常困难。由于浏览器支持不同的文件格式,因此如果您打算支持自适应流式传输,则需要创建多个经过优化的文件,并且可能还需要创建一个清单。在转换文件之前,您需要了解一些有关文件及其特性的基础知识。

容器、编解码器和数据流?

您在操作系统 shell 中看到的文件是一个容器,由文件扩展名(.mp4.webm.ogg 等)标识。该容器包含一个或多个数据流。媒体文件可以包含任意数量的串流,并且格式远远超出我们在此介绍的范围。

本部分后面使用的示例文件最多包含两个数据流:音频流和视频流。您可能会遇到其他类型,例如字幕和数据,但这两者都超出了本文的讨论范围。在某些情况下,系统会单独处理音频流和视频流。您遇到的大多数文件都只包含一个音频流和一个视频流。

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

下图展示了此结构。左侧是包含两个数据流的基本容器结构。右侧显示了单个 WebM 文件的该结构的具体信息。

将媒体文件结构与假想的媒体文件进行比较。
媒体文件的各个部分。

WebM 容器中的文件可能比其他格式的文件小几个数量级,因此非常适合移动网站进行流式传输。很遗憾,并非所有浏览器都支持最新的容器和编解码器。例如,WebM 是专为 Web 打造的优质开源选项,但尚未获得普遍支持。根据我可以使用哪些内容部分,Safari 目前不支持嵌入 WebM 视频。不过,WebM 确实对 WebRTC 中使用的 VP8 和 VP9 编解码器提供了部分支持。因此,您最好提供后备视频。

编解码器格式

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

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

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

比特率和分辨率

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

分辨率是单个视频帧中的信息量,以每个维度中的逻辑像素数表示。我们在分辨率部分详细介绍了此概念。

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