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(抽象)Mp4InputFormatQuickTimeInputFormat
MatroskaInputFormatWebMInputFormat
Mp3InputFormatWaveInputFormatOggInputFormatAdtsInputFormatFlacInputFormatMpegTsInputFormatHlsInputFormat
这意味着您也可以使用 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 的一个实例。