更新记录
1.0(2026-11-04) 下载此版本
first commit
平台兼容性
销秘 OGG/Opus 播放器插件(saleai-ogg-player)
概述
iOS 原生音频播放插件,支持 OGG/Opus 格式的录音文件播放。内置 libopus + libogg 解码器,支持进度控制、变速播放和音频会话管理。
环境要求
| 项目 | 要求 |
|---|---|
| 最低 iOS 版本 | 12.0 |
| 支持架构 | arm64 |
| 依赖系统框架 | AVFoundation.framework、AudioToolbox.framework |
| 依赖系统库 | libc++.tbd |
| 内置解码器 | libopus 1.4、libogg 1.3、libopusfile 0.12 |
权限列表
无需额外权限。音频播放使用 AVAudioSession 的 .playback 类别。
如需后台播放,在 Info.plist 中添加:
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
JS 接口
获取插件实例
const player = uni.requireNativePlugin('saleai-ogg-player')
1. prepare(options, callback) — 准备播放
加载音频文件并初始化解码器。必须在其他操作之前调用。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| options.sessionId | String | 是 | 会话 ID(用于多实例隔离) |
| options.scope | String | 是 | 授权作用域 |
| options.assetId | String | 是 | 音频资产 ID |
| options.url | String | 否 | 本地文件路径(与 localPath 二选一) |
| options.localPath | String | 否 | 本地文件路径 |
| options.sha256 | String | 否 | 文件 SHA256 校验值 |
| options.sizeBytes | Number | 否 | 文件大小(字节) |
示例:
player.prepare({
sessionId: 'session-1',
scope: 'audio-library',
assetId: 'recording-001',
url: 'file:///var/mobile/.../recording.ogg',
sha256: 'abc123...',
sizeBytes: 1024000
}, result => {
if (result.error) { console.error('准备失败:', result.error); return }
console.log('准备完成,时长:', result.durationMs, 'ms')
})
2. start(options, callback) — 开始播放
从当前位置开始播放(首次从 0 开始)。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| options.sessionId | String | 是 | 会话 ID |
| options.scope | String | 是 | 授权作用域 |
示例:
player.start({ sessionId: 'session-1', scope: 'audio-library' }, result => {
if (result.error) { console.error('播放失败:', result.error) })
})
3. pause(options, callback) — 暂停
暂停当前播放。
player.pause({ sessionId: 'session-1', scope: 'audio-library' }, result => { ... })
4. seek(options, callback) — 跳转进度
跳转到指定位置。
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| options.positionMs | Number | 是 | 目标位置(毫秒) |
player.seek({ sessionId: 'session-1', scope: 'audio-library', positionMs: 30000 }, result => { ... })
5. setRate(options, callback) — 设置播放速度
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| options.rate | Number | 是 | 播放速度(0.5 ~ 3.0) |
支持的倍速:0.5, 0.75, 1.0, 1.25, 1.5, 2.0, 3.0
player.setRate({ sessionId: 'session-1', scope: 'audio-library', rate: 1.5 }, result => { ... })
6. stop(options, callback) — 停止
停止播放并释放当前文件资源(不销毁插件实例)。
player.stop({ sessionId: 'session-1', scope: 'audio-library' }, result => { ... })
7. destroy(options, callback) — 销毁
完全销毁插件实例,释放所有资源。
player.destroy({ sessionId: 'session-1', scope: 'audio-library' }, result => { ... })
状态回调
prepare 的 callback 是保活回调,播放过程中会持续推送状态事件:
{ event: 'progress', positionMs: 5000, durationMs: 120000 }
{ event: 'ended' }
{ event: 'error', error: 'DECODE_FAILED' }
{ event: 'interruptionBegan' } // 电话/其他 App 中断
{ event: 'interruptionEnded' } // 中断恢复
错误码
| 错误码 | 说明 |
|---|---|
NOT_READY |
未 prepare 或 prepare 失败 |
SESSION_MISMATCH |
sessionId 不匹配 |
SCOPE_UNAUTHORIZED |
scope 未授权 |
FILE_NOT_FOUND |
音频文件不存在 |
SHA_MISMATCH |
文件校验失败 |
DECODE_FAILED |
解码失败(文件损坏或格式不支持) |
SEEK_FAILED |
跳转失败 |
SESSION_INTERRUPTED |
音频会话被中断 |
注意事项
- 必须先调用
prepare()再调用start() - 每次播放新文件需要重新
prepare() sessionId和scope用于安全隔离,确保只有授权的页面能控制播放- 支持 OGG/Opus 格式(
.ogg扩展名) - 变速范围 0.5x ~ 3.0x
- 自动处理音频中断(电话等)并尝试恢复
更新日志
v1.0.0
- 初始版本
- 支持 OGG/Opus 格式播放
- 支持进度控制(seek/pause/resume)
- 支持变速播放(0.5x-3.0x)
- 支持音频会话管理(中断恢复)
- 内置 SHA256 文件校验

收藏人数:
下载插件并导入HBuilderX
赞赏(0)
下载 0
赞赏 0
下载 12742646
赞赏 1959
赞赏
京公网安备:11010802035340号