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 years ago | |
|---|---|---|
| .. | ||
| .gradle | 2 years ago | |
| android | 2 years ago | |
| example/lib | 2 years ago | |
| ios | 2 years ago | |
| lib | 2 years ago | |
| README.md | 2 years ago | |
| gradle.properties | 2 years ago | |
| pubspec.yaml | 2 years ago | |
| settings.gradle.kts | 2 years ago | |
README.md
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 目录中的示例代码,了解如何使用此插件生成、编码和解码音频数据。