import { AVDecoderRequest, AVDecoderResponse, OpenAudioDecodeResponse, AVEncoderRequest, AVEncoderResponse, AssemblyResponse } from "./interface"; import WebAssemblyWorker from "./webassembly"; import Audio from './player/audio'; export default class AVCodecWebAssembly extends WebAssemblyWorker { public static Audio = Audio public static AvariableWebAssembies = { 'opus-pure': '/opus-pure.wasm', 'opus': '/opus.wasm', 'daudio': '/daudio.wasm' } public static defaultAssembly: keyof typeof AVCodecWebAssembly.AvariableWebAssembies constructor(type?: keyof typeof AVCodecWebAssembly.AvariableWebAssembies, options?: { debug?: boolean }) { type = type || AVCodecWebAssembly.defaultAssembly; super(type, AVCodecWebAssembly.AvariableWebAssembies[type], (options || {}).debug); } /** * 打开音频解码器 */ openAudioDecode(options: AVDecoderRequest): Promise { return this.invoke({ action: 'open_audio_decode', data: options }) as Promise; } /** * 解码音频数据,注意调用此函数前,要先调用`openAudioDecode` */ decodeAudio(data: AVDecoderRequest): Promise { return this.invoke({ action: 'audio_decode', data: data }) as Promise; } /** * 关闭音频解码器 */ closeAudioDecode(): Promise { return this.invoke({ action: 'close_audio_decode', data: null }); } /** * 解码音频文件 * @returns */ decodeAudioFile(file: File): Promise { return this.invoke({ action: 'decode', data: file }) as Promise; } /** * 编码音频文件 * @param options * @returns */ encodeAudioFile(options: AVEncoderRequest): Promise { return this.invoke({ action: 'encode', data: options }) as Promise; } /** * 打开编码器 */ openAudioEncode(options: AVEncoderRequest): Promise { return this.invoke({ action: 'open_audio_encode', data: options }); } /** * 编码数据 */ encodeAudio(buffer: Uint8Array): Promise { return this.invoke({ action: 'audio_encode', data: buffer }); } /** * 关闭编码器 */ closeAudioEncode(): Promise { return this.invoke({ action: 'close_audio_encode' }) as Promise; } } (window as any).FFmpegJs = AVCodecWebAssembly;