Mediabunny 支持多种常用的容器格式用于读取输入文件。这些 输入格式 有两种用途:

  • 在创建 Input 时,它们用于指定支持的容器格式列表。详见 创建新输入。
  • 给定一个现有的 Input,其 getFormat 方法会返回文件的 实际 格式,作为一个 InputFormat。

输入格式属性 ​

获取格式的完整书写名称如下:

inputFormat.name; // => 'MP4'

您还可以获取格式的基础 MIME 类型:

inputFormat.mimeType; // => 'video/mp4'

如果您需要依赖于轨道编解码器的文件完整 MIME 类型,请使用 getMimeType 方法(作用于 Input)。

输入格式单例 ​

由于输入格式不需要任何额外配置,每个输入格式都直接作为导出的单例实例可用:

import {
	MP4, // MP4 输入格式单例
	QTFF, // QuickTime File Format 输入格式单例
	MATROSKA, // Matroska 输入格式单例
	WEBM, // WebM 输入格式单例
	MP3, // MP3 输入格式单例
	WAVE, // WAVE 输入格式单例
	OGG, // Ogg 输入格式单例
	ADTS, // ADTS 输入格式单例
	FLAC, // FLAC 输入格式单例
	MPEG_TS, // MPEG-TS 输入格式单例
	HLS, // HLS 输入格式单例
} from 'mediabunny';

您可以在创建输入时使用这些单例:

import { Input, MP3, WAVE, OGG } from 'mediabunny';

const input = new Input({
	formats: [MP3, WAVE, OGG],
	// ...
});

您也可以使用它们来检查 Input 的实际格式:

import { MP3 } from 'mediabunny';

const isMp3 = (await input.getFormat()) === MP3;

Mediabunny 导出一个特殊的 ALL_FORMATS 常量,其中包含所有输入格式单例。如果您希望支持尽可能多的格式,请使用此常量:

import { Input, ALL_FORMATS } from 'mediabunny';

const input = new Input({
	formats: ALL_FORMATS,
	// ...
});

使用 ALL_FORMATS 意味着所有格式的 解复用器 都必须包含在捆绑包中,这可能会显著增加捆绑包大小。仅在需要支持所有格式时才使用它。

输入格式类层次结构 ​

除了单例外,输入格式类还具有层次结构:

  • InputFormat (抽象)
    • IsobmffInputFormat (抽象)
      • Mp4InputFormat
      • QuickTimeInputFormat
    • MatroskaInputFormat
      • WebMInputFormat
    • Mp3InputFormat
    • WaveInputFormat
    • OggInputFormat
    • AdtsInputFormat
    • FlacInputFormat
    • MpegTsInputFormat
    • HlsInputFormat

这意味着您也可以使用 instanceof 而不是 === 比较来进行输入格式检查。例如:

import { Mp3InputFormat } from 'mediabunny';

// 检查文件是否为 MP3:
(await input.getFormat()) instanceof Mp3InputFormat;

// 检查文件是否为 Matroska (MKV + WebM):
(await input.getFormat()) instanceof MatroskaInputFormat;

// 检查文件是否为 MP4 或 QuickTime:
(await input.getFormat()) instanceof IsobmffInputFormat;

实际上 🤓☝️,QuickTime File Format 在技术上并不是 ISO Base Media File Format (ISOBMFF) 的一个实例——相反,ISOBMFF 是一个最初受 QTFF 启发的标准。然而,由于两者极其相似且使用方式相同,为了方便起见,我们将 QTFF 视为 IsobmffInputFormat 的一个实例。