更新记录

1.0.0(2025-09-05)

项目初始化

  • iOS和Android基础录音功能实现
  • 暂停/恢复、进度监控、格式支持等核心功能
  • UTS混合开发架构搭建

平台兼容性

uni-app(4.76)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - - - -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - -

uni-app x(4.76)

Chrome Safari Android iOS 鸿蒙 微信小程序
- - - -

hens-recorder

跨端统一录音插件 - UTS实现版本

✨ 特性

  • 🎯 跨平台一致性: iOS/Android行为完全统一,相同的API,相同的响应
  • 📱 原生性能: UTS混合开发,Swift/Kotlin原生实现,性能卓越
  • 🎚️ 完整功能: 录音/暂停/恢复/停止,实时进度,状态监控
  • 🔄 智能缓存: iOS端状态缓存优化,减少桥接调用
  • 🚨 统一错误处理: 标准化错误码格式,便于应用层处理
  • 📊 多订阅模式: 支持多个进度/状态/错误监听器
  • 🎵 统一格式: 两端都输出m4a(AAC)格式
  • 📂 私有存储: 统一使用应用私有目录,无需额外存储权限

🚀 快速开始

基本用法

import { ensurePermissions, start, pause, resume, stop, getStatus, 
         onRecordingProgress, offRecordingProgress, onStateChange, 
         offStateChange, onError, offError, getCapabilities } 
from '@/uni_modules/hens-recorder'

// 1. 确保权限
ensurePermissions({
  options: { mic: true, notifications: 'auto' },
  success: () => {
    // 2. 开始录音
    start({
      options: {
        format: 'm4a',        // 固定m4a格式(AAC编码)
        quality: 'medium',    // 音质: high/medium/low
        maxDurationMs: 0,     // 0=无限制
        // 可选:自定义输出路径(应用私有目录内)
        // output: { filePath: '/path/to/private/dir/my.m4a' },
        foreground: { 
          enabled: true, 
          channelId: 'recorder', 
          channelName: '录音服务' 
        },
        interruption: 'pause',      // 中断策略: pause/stop/ignore
        progressIntervalMs: 500,    // 进度间隔[100,2000]ms
        ensurePermissions: true     // 自动检查权限
      },
      success: (res) => { console.log('录音开始:', res) },
      fail: (e) => { console.log('录音失败:', e) }
    })
  },
  fail: (e) => { console.log('权限申请失败:', e) }
})

进度与状态监控

// 进度监控 - 支持多订阅
const progressId = onRecordingProgress((status) => { 
  console.log('录音进度:', status.durationMs, 'ms') 
})

// 状态变化监控
const stateId = onStateChange((state, status) => { 
  console.log('状态变化:', state) // idle/recording/paused
})

// 错误监控
const errorId = onError((err) => { 
  console.log('录音错误:', err.errCode, err.errMsg) 
})

// 控制操作
pause({ success: () => {}, fail: console.error })
resume({ success: () => {}, fail: console.error })  
stop({ success: (res) => { 
  console.log('录音完成:', res.status.filePath) 
}, fail: console.error })

// 取消监听
offRecordingProgress(progressId)
offStateChange(stateId)
offError(errorId)

📋 API参考

核心配置

参数 类型 默认值 说明
format 'm4a' 'm4a' 音频格式(固定m4a/AAC)
quality 'high'|'medium'|'low' 'medium' 音质级别
maxDurationMs number 0 最大时长(毫秒),0=无限制
progressIntervalMs number 500 进度间隔[100,2000]ms
interruption 'pause'|'stop'|'ignore' 'pause' 音频中断策略

响应格式

// RecorderResult
{
  status: {
    state: 'idle' | 'recording' | 'paused',
    durationMs: number,      // 累计录音时长(毫秒)
    filePath: string         // 录音文件路径
  },
  message?: string,          // 附加消息
  actualFormat: 'm4a',       // 实际输出格式
  autoStopReason?: 'manual' | 'maxDuration' | 'interruption' | 'error'
}

⚠️ 错误码说明

标准格式: "9010XXX:详细说明"

错误码 说明 可重试
9010001 麦克风权限被拒绝
9010002 录音文件创建失败
9010003 录音器初始化失败
9010004 录音器状态错误 视状态
9010005 存储空间不足
9010006 录音格式不支持
9010007 音频会话设置失败
9010008 录音准备失败
9010009 录音开始失败
9010010 音频编码错误
9010011 文件系统错误
9010012 设备音频硬件不可用

🔧 平台特性

iOS

  • ✅ AVFoundation + AVAudioRecorder
  • ✅ 状态缓存优化性能
  • ✅ 后台录音支持
  • ✅ 音频会话中断处理
  • ✅ 简化的实例管理

Android

  • ✅ MediaRecorder + 前台服务
  • ✅ API 24+ 原生暂停/恢复
  • ✅ 音频焦点管理
  • ✅ 自动存储清理
  • ✅ 通知权限适配(Android 13+)

📝 注意事项

  1. 格式统一: 两端都输出m4a(AAC)格式,RecorderResult.actualFormat === 'm4a'
  2. 权限处理: 建议使用ensurePermissions统一处理权限申请
  3. 错误监控: 推荐使用onError统一监听错误,便于集中处理
  4. 进度监控: iOS/Android都支持多订阅模式,行为完全一致
  5. 存储路径: 统一使用应用私有目录,无需WRITE_EXTERNAL_STORAGE权限

🔗 相关链接

隐私、权限声明

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

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

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

暂无用户评论。