更新记录
1.0.0(2026-07-21)
首发:opus 音频编解码。
- packet 级流式编解码:有状态编解码器+显式生命周期;16kbps 恒定码率每帧稳定 40B,适合对讲/连麦/IM 语音消息按帧走网络
- 文件级 WAV↔opus 转码:标准 ogg/opus 容器产物主流播放器可播,样本数精确还原
- 参数越界/坏包/释放后调用一律安全拒绝,不闪退
- App-Android(3 ABI)+ App-iOS(iOS 14+);H5/小程序不支持(能力探测 platformCapabilities)
平台兼容性
uni-app x(5.14)
| Chrome | Safari | Android | iOS | 鸿蒙 | 微信小程序 |
|---|---|---|---|---|---|
| × | × | 5.0 | √ | × | × |
nex-opus 音频编解码(opus 格式)
uni-app x 的 opus 音频编解码插件:packet 级流式编解码(对讲 / 实时语音传输)+ 文件级 WAV↔opus 转码(录音存储 / 传输省流量)。高性能原生实现,全程离线,无网络依赖。
为什么选 opus
- 体积:16kbps 规格下 1 秒语音仅约 2KB(原始 PCM 32KB,压缩 16:1);一分钟录音 ≈120KB。
- 实时:20ms 一帧、恒定码率可选,帧长可预期(16kbps CBR 每帧稳定 40 字节),适合对讲、 连麦、IM 语音消息、IoT 语音透传等按帧走网络的场景。
- 通用:opus 是 WebRTC / 主流 IM 通用的开放音频格式,产物
.opus(ogg 容器)主流播放器可直接播。
支持端
| 端 | 支持 | 说明 |
|---|---|---|
| App-Android | ✅ | arm64-v8a / armeabi-v7a / x86_64 |
| App-iOS | ✅ | iOS 14+ |
| H5 / 小程序 | ❌ | 音频编解码为 App 端原生能力;platformCapabilities() 可探测 |
快速开始
流式编解码(对讲/实时语音)
import { createOpusEncoder, createOpusDecoder } from '@/uni_modules/nex-opus'
// 16kHz 单声道 / 16kbps / 20ms 帧 / 恒定码率(对讲推荐规格)
const enc = createOpusEncoder({
sampleRate: 16000, channels: 1, bitrate: 16000,
cbr: true, frameMs: 20, application: 'voip'
})
const dec = createOpusDecoder({ sampleRate: 16000, channels: 1 })
const frameLen = enc!.frameSamples() // 320:每帧样本数,录音回调按此切帧
// pcm: number[],16bit 有符号样本(-32768..32767),长度 = frameLen × channels
const packet = enc!.encodeFrame(pcm) // 一帧 → 一个 opus packet(number[] 字节)
const pcmOut = dec!.decodePacket(packet) // 一个 packet → 一帧 PCM
enc!.destroy(); dec!.destroy() // 用完显式释放
文件转码(录音压缩存储)
import { opusEncodeWavFile, opusDecodeFileToWav } from '@/uni_modules/nex-opus'
// WAV → .opus(ogg/opus 容器,主流播放器可播)
const stats = await opusEncodeWavFile(srcWavPath, outOpusPath, 24000)
console.log(`压缩后 ${stats.bytesOut} 字节 / ${stats.frames} 帧 / ${stats.durationMs}ms`)
// .opus → WAV(样本数精确还原)
await opusDecodeFileToWav(opusPath, outWavPath)
API 一览
| API | 形态 | 说明 |
|---|---|---|
createOpusEncoder(options) |
同步 | 建流式编码器;参数越界拒绝不静默修正 |
createOpusDecoder(options) |
同步 | 建流式解码器 |
OpusEncoder.encodeFrame(pcm) |
同步 | 一帧 PCM → 一个 packet(µs~ms 级,适合录音回调内联调用) |
OpusDecoder.decodePacket(packet) |
同步 | 一个 packet → 一帧 PCM;坏包安全拒绝不闪退 |
resetState() / destroy() |
同步 | 流中断重同步 / 显式释放 |
frameSamples() / sampleRate() / channelCount() |
同步 | 创建参数快照 |
opusEncodeWavFile(in, out, bitrate) |
Promise | WAV → .opus(后台线程,不冻 UI) |
opusDecodeFileToWav(in, out) |
Promise | .opus → WAV |
opusVersion() / platformCapabilities() |
同步 | 版本 / 端能力探测 |
参数合法值(越界报错,不静默修正):sampleRate ∈ 8000/12000/16000/24000/48000;
channels 1/2;bitrate [6000, 510000];frameMs ∈ 2.5/5/10/20/40/60;
application voip/audio/lowdelay。
错误行为(双端差异)
- Android:参数越界 / 坏包 / 已 destroy 抛异常(message 含详情),
try/catch捕获。 - iOS:同场景哨兵返回(
create*返回null;encodeFrame/decodePacket返回空数组), 详情见控制台日志;文件级 Promise 双端一致 reject。
注意事项
- WAV 仅支持 16bit PCM、采样率须在合法值列表内(本插件不做重采样,越界明确报错)。
- 录音采集本身请用 uni 录音 API / 原生录音插件;本插件专注编解码(PCM 进出)。
- packet 是「一帧一包」:网络传输自行组帧(长度前缀 / WebSocket 二进制帧均可)。

收藏人数:
购买普通授权版(
试用
赞赏(0)
下载 1178
赞赏 0
下载 12444349
赞赏 1935
赞赏
京公网安备:11010802035340号