@ audio/decode-mp4 (英语)
将MP4,MOV,M4A,M4V和3GP文件的音频轨道解码为PCM浮标样本.
一个纯-JS ISO BMFF解调器,可以跳过视频轨迹并引导音频(AAC,ALAC,MP3,FLAC,Opus,AC-3,DTS,AMR,PCM)到匹配的编码包,按需要加载.
import decode, { decoder } from '@audio/decode-mp4'
let { channelData, sampleRate } = await decode(mp4Bytes)
let dec = await decoder()
let head = await dec.decode(chunk1) // Promise on the chunk that completes the track header
let more = dec.decode(chunk2) // synchronous from then on
let tail = await dec.flush()
dec.free()
编解码器
| 样本条目 | 代码c | 解码由 |
|---|---|---|
mp4a (对象类型 0x40, 0x66–0x68) | AAC-LC, HE-AAC v1/v2 (英语) | @ audio/decode-aac |
alac | 无苹果损失 | @ audio/decode-aac (纯联署材料) |
mp4a (0x69, 0x6B), (中文(简体) ), .mp3 | MP3 主题 | @ audio/decode-mp3 (英语) |
fLaC | 拉丁美洲和加勒比 | @audio/decode-flac (英语) |
Opus | 奥普斯 Opus | @ audio/decode-opus (英语) |
samr, (中文(简体) ), sawb | AMR-NB、AMR-WB | @ audio/decode-amr (英语) |
sowt, (中文(简体) ), twos, (中文(简体) ), in24, (中文(简体) ), in32, (中文(简体) ), fl32, (中文(简体) ), fl64, (中文(简体) ), lpcm, (中文(简体) ), ipcm, (中文(简体) ), fpcm, (中文(简体) ), raw , (中文(简体) ), NONE | PCM 8–32 位点正中, 32/64 位点浮出水面, 无论是内向 | 建于内 |
ulaw, (中文(简体) ), alaw | G. 711号文件 | 建于内 |
ac-3, (中文(简体) ), mp4a (0xA5) (英语) | AC-3号 | @ audio/decode-ac3 (英语) |
dtsc, (中文(简体) ), dtsh, (中文(简体) ), dtsl, (中文(简体) ), dtse, (中文(简体) ), mp4a (0xA9) (简体中文) | DTS( 核心) | @ audio/decode-dts (英语) |
ec-3, (中文(简体) ), mp4a (0xA6) (中文(简体) ) | E-AC-3(多比数字加号) | @ audio/ decode-eac3 (英语) |
TrueHD 音轨丢出一个给解码器命名的错误 。 被分解的MP4(ISO/IEC 14496-12§8.8), moof+ 键mdat 在空表之后 moov流被片断,只持有尚未读取的字节。 QuickTime 声音描述 v0, v1 和 v2 处理, 包括 wave- 包装的配置和 enda 内向旗. 何时 moov 如下 mdat (典型的相机和QuickTime输出)文件被缓冲到标题到达.
解码器包是动态导入的,在 AudioWorklet —— 主线程或 Worker 中解码器内部是没有的.
API 密码
decode(src: Uint8Array | ArrayBuffer): Promise<AudioData>
解码一个完整的文件 .
decoder(): Promise<MP4Decoder>
流出解码器. decode(chunk) 返回时 AudioData,或者在编解码模块加载时完成音轨头的块上承诺. flush() 如果找不到音频音轨,则返回剩余样本并丢出. free() 释放代码资源.
AudioData
{ channelData: Float32Array[], sampleRate: number }
