更新记录

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 音频会话被中断

注意事项

  1. 必须先调用 prepare() 再调用 start()
  2. 每次播放新文件需要重新 prepare()
  3. sessionId 和 scope 用于安全隔离,确保只有授权的页面能控制播放
  4. 支持 OGG/Opus 格式(.ogg 扩展名)
  5. 变速范围 0.5x ~ 3.0x
  6. 自动处理音频中断(电话等)并尝试恢复

更新日志

v1.0.0

  • 初始版本
  • 支持 OGG/Opus 格式播放
  • 支持进度控制(seek/pause/resume)
  • 支持变速播放(0.5x-3.0x)
  • 支持音频会话管理(中断恢复)
  • 内置 SHA256 文件校验

隐私、权限声明

1. 本插件需要申请的系统权限列表:

无需额外权限。音频播放使用 AVAudioSession 的 .playback 类别。

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

插件不采集任何数据

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

无

许可协议

MIT协议

暂无用户评论。