更新记录

1.0.1(2026-04-09)

更新 IOS 版本

1.0.0(2026-04-09)

  • 原生相机预览,支持前后摄像头切换
  • 手动开始录制和停止录制
  • 默认静音录制,可按需开启音频
  • 支持配置录制最大时长
  • 支持圆形、圆角、方形预览样式
  • Android 支持录制过程中的预览帧回调
  • 模板页支持按固定间隔抽帧并打印日志

平台兼容性

uni-app(4.75)

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

uni-app x(4.75)

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

austin-record-frame

austin-record-frame 是一个面向 App 端的 UTS 原生录制插件,提供原生相机预览、手动开始/停止录制、静音录制、圆形/圆角预览,以及录制过程中的周期抽帧能力。插件同时附带模板页,用于演示录制、抽帧开关控制、抽帧间隔设置,以及控制台输出视频路径和抽帧结果。

功能特性

  • iOS / Android 原生相机预览
  • 手动开始录制和停止录制
  • 默认静音录制,可按需开启音频
  • 支持配置录制最大时长
  • 支持圆形、圆角、方形预览样式
  • iOS / Android 都支持录制过程中的 framecapture 预览帧回调
  • 模板页支持按固定间隔抽帧并打印日志

适用场景

  • 需要一个简单、可控的原生视频录制能力
  • 需要在录制过程中持续拿到视频状态和文件路径
  • 需要在业务页面里获取“最近一次抽帧图片”做预览、质检或后续识别

安装

将以下目录放入项目的 uni_modules 目录:

  • uni_modules/austin-record-frame

如果需要直接运行插件自带模板页中的视频文件抽帧演示,请同时安装依赖模块:

权限要求

默认行为

  • 默认使用 :mute="true",只需要相机权限
  • 录制文件和抽帧图片默认写入应用私有目录,不需要额外存储权限
  • 当前插件不会主动保存到系统相册,所以默认不需要相册读写权限

iOS 配置

如果你通过 manifest.json 配置 iOS 权限文案,至少需要补上相机权限说明:

{
  "app-plus": {
    "distribute": {
      "ios": {
        "privacyDescription": {
          "NSCameraUsageDescription": "用于录制视频和预览画面",
          "NSMicrophoneUsageDescription": "用于录制视频声音"
        }
      }
    }
  }
}

说明:

  • NSCameraUsageDescription 必填
  • mute=false 时,需要 NSMicrophoneUsageDescription
  • 如果你的页面始终固定 mute=true,理论上可以不配置麦克风文案;但如果业务后面可能切到非静音录制,建议一并配置

Android 配置

  • android.permission.CAMERA
  • mute=false 时,还需要 android.permission.RECORD_AUDIO

说明:

  • 插件模板页已经包含相机权限申请流程
  • 如果你在自己的业务页面里直接接入组件,建议在进入页面前自行确认权限状态
  • 如果你的业务后续要把录制结果保存到相册,再额外配置相册相关权限

组件用法

<austin-record-frame
  ref="recorderRef"
  cameraPosition="front"
  resolution="720p"
  :mute="true"
  :maxDurationMs="0"
  :previewCornerRadiusRate="0.5"
  :frameCaptureEnabled="true"
  :frameCaptureIntervalMs="1000"
  :frameCaptureQuality="85"
  @ready="onRecorderReady"
  @recordstart="onRecordStart"
  @recordprogress="onRecordProgress"
  @recordfile="onRecordFile"
  @recordstop="onRecordStop"
  @framecapture="onFrameCapture"
  @error="onRecordError"
/>

Props

属性名 类型 默认值 说明
cameraPosition string front 摄像头位置,可选 front / back
resolution string 720p 分辨率,可选 720p / 1080p
mute boolean true 是否静音录制
maxDurationMs number 8000 最大录制时长,单位毫秒,<= 0 表示不自动停止
previewCornerRadiusRate number 0.5 预览圆角比例,0.5 = 圆形0 = 方形
frameCaptureEnabled boolean false 是否开启录制中的周期抽帧
frameCaptureIntervalMs number 1000 抽帧间隔,单位毫秒,建议 >= 200
frameCaptureQuality number 85 JPG 输出质量,范围 1-100

事件

事件名 说明 推荐读取字段
ready 组件准备完成,预览可用
recordstart 开始录制 filePathdurationMsorientationDegrees
recordprogress 录制中进度回调 durationMs
recordfile 录制文件可用时回调 filePathdurationMsorientationDegrees
recordstop 停止录制 filePathdurationMsorientationDegrees
framecapture 录制中抽帧回调 filePathimagePathwidthheighttimeMsdurationMscaptureMode
error 录制或预览异常 errCodeerrMsg

统一输出字段

Android 和 iOS 对外推荐的业务输出是一致的。业务层建议统一按下面这组字段消费,不要分平台写两套逻辑:

recordstart

{
  filePath: string,
  durationMs: number,
  orientationDegrees: number
}

recordprogress

{
  durationMs: number
}

recordfile / recordstop

{
  filePath: string,
  durationMs: number,
  orientationDegrees: number
}

framecapture

{
  filePath: string,
  imagePath: string,
  width: number,
  height: number,
  timeMs: number,
  durationMs: number,
  captureMode: 'preview'
}

error

{
  errCode: number,
  errMsg: string
}

补充说明:

  • iOS 原生层内部有时会额外带 path 作为 filePath 的别名,但对外统一按 filePath 消费即可
  • framecapture 对外统一按 imagePathwidthheighttimeMsdurationMs 读取即可
  • 正常接入这个插件时,不需要因为 Android / iOS 差异再额外写两套事件解析逻辑

方法

下面这几项是推荐作为跨平台统一业务 API 使用的方法:

方法名 说明
startPreview() 开始预览
stopPreview() 停止预览
startRecord() 开始录制
stopRecord() 停止录制
switchCamera(position) 切换前后摄像头
getCurrentFilePath() 获取当前录制文件路径或最近一次录制路径

补充说明:

  • Android / iOS 的主调用方式是一致的,推荐只使用上面这组方法
  • Android 额外暴露了 capturePreviewFrame() 调试方法,但它不属于推荐的跨平台统一业务 API
  • iOS 当前也有内部兜底用的预览帧 getter,但同样不建议业务层直接依赖

模板页说明

当前目录下的 index.nvue 是插件模板页,主要演示以下能力:

  • 原生相机预览
  • 手动开始 / 停止录制
  • 开启 / 关闭抽帧
  • 设置抽帧间隔
  • 设置抽帧质量
  • 设置预览圆角
  • 控制台打印录制视频路径
  • 控制台打印每次抽帧结果
  • 显示“最近一次抽帧”的图片预览

模板页主要用于业务验证和联调,你可以直接复制页面逻辑到自己的项目页面中继续扩展。

模板页中的视频文件抽帧能力依赖 austin-video-frame 视频抽帧插件

隐私、权限声明

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

### iOS NSCameraUsageDescription ### Android android.permission.RECORD_AUDIO

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

插件不采集任何数据

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

暂无用户评论。