You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

2.2 KiB

Opus Plugin for Flutter

一个用于在 Flutter 中使用 Opus 音频编解码器的插件,支持 Android 和 iOS 平台。

功能

  • Opus 编码:将 PCM 音频数据编码为 Opus 格式
  • Opus 解码:将 Opus 数据解码为 PCM 音频
  • 支持灵活设置编码参数:采样率、声道数、应用类型、复杂度等
  • 兼容 Android 和 iOS 平台

使用方法

添加依赖

由于这是本地插件,在 pubspec.yaml 中添加:

dependencies:
  opus:
    path: local_plugins/opus

初始化编解码器

// 创建编码器
await Opus.createEncoder(
  sampleRate: 48000,  // 采样率 (Hz)
  channels: 2,        // 声道数 (1=单声道, 2=立体声)
  application: OpusApplicationType.audio,  // 应用类型
  complexity: 10,     // 复杂度 (0-10)
  frameSize: 960,     // 帧大小
);

// 创建解码器
await Opus.createDecoder(
  sampleRate: 48000,
  channels: 2,
);

编码和解码

// 编码 PCM 数据
Uint8List pcmData = ...;  // 16位 PCM 音频数据
Uint8List? opusData = await Opus.encodeData(pcmData);

// 解码 Opus 数据
Uint8List opusData = ...;  // Opus 编码数据
Uint8List? pcmData = await Opus.decodeData(opusData, frameSize: 960);

释放资源

// 释放编码器资源
await Opus.disposeEncoder();

// 释放解码器资源
await Opus.disposeDecoder();

关于 Opus

Opus 是一种开源、免版税的音频编解码器,专为通过互联网传输音频而设计。它可变比特率从 6 kbit/s 到 510 kbit/s,帧大小从 2.5 ms 到 60 ms,支持采样率从 8 kHz(窄带)到 48 kHz(全频带)。

Opus 特点:

  • 低延迟 (5-20ms)
  • 高音质
  • 灵活的比特率
  • 支持语音和音乐
  • 强大的丢包恢复能力

配置说明

Android 配置

需要将 libopus.so 文件放在以下目录:

  • android/src/main/jniLibs/armeabi-v7a/libopus.so
  • android/src/main/jniLibs/arm64-v8a/libopus.so

注意:若需要自行编译 Opus,可参考 https://opus-codec.org/ 官方指南。

iOS 配置

需要将 opus.framework 或 libopus.a 放在 ios/Frameworks 目录下。

示例

查看 example 目录中的示例代码,了解如何使用此插件生成、编码和解码音频数据。