更新记录

0.0.1(2026-06-04)

  • 首个版本发布。
  • 新增 iOS 原生竖屏视频录制能力,用于解决部分场景下 iOS 竖屏视频录制、预览或上传后方向变横屏的问题。
  • 支持录制时长限制,默认最短 10 秒、最长 180 秒。
  • 支持录制达到最长时长后自动停止。
  • 支持录制完成后的预览流程,用户可选择“重拍”或“完成”。
  • 支持录制时间实时显示。
  • 支持前置、后置摄像头切换。
  • 支持自定义录制界面的按钮文案和错误提示。
  • 支持录制质量配置、静音录制、后置摄像头补光灯。
  • 支持返回视频本地路径、视频时长、文件大小和封面图路径。

平台兼容性

uni-app(3.7.8)

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

iOS 竖屏视频录制插件

snowfee-ios-portrait-video-recorder 是一个基于 UTS + iOS 原生 AVFoundation 实现的视频录制插件,主要用于 uni-app / uni-app x 在 iOS 真机中录制竖屏视频。

这个插件最初是为了解决 iOS 使用系统相机或部分压缩流程后,竖屏视频预览、上传或播放时可能变成横屏的问题。插件通过原生录制流程固定竖屏方向,并返回本地临时视频路径,适合校园动态、课堂记录、表单上传、短视频采集等场景。

功能特性

  • 使用 iOS 原生 AVFoundation 录制视频
  • 固定竖屏录制,减少竖屏视频变横屏的问题
  • 支持 10-180 秒录制时长控制,默认最短 10 秒、最长 180 秒
  • 达到最长时长后自动停止录制
  • 支持录制后预览,并提供“重拍”和“完成”操作
  • 录制时间实时显示
  • 录制时长不足最短限制时,点击完成会展示错误提示
  • 支持前置、后置摄像头切换
  • 支持自定义原生按钮文案
  • 支持录制质量配置
  • 支持静音录制
  • 支持后置摄像头补光灯,使用 iOS torch 常亮模式
  • 返回视频本地路径、时长、大小和封面图路径

平台支持

平台 支持情况
App iOS 支持
App Android 不支持
H5 不支持
小程序 不支持

权限说明

插件需要以下 iOS 权限:

  • NSCameraUsageDescription
  • NSMicrophoneUsageDescription

如果设置 enableAudio: false,插件不会主动请求麦克风权限,但项目中仍建议保留麦克风权限描述,避免后续切换为有声录制时遗漏配置。

插件不采集用户数据,不上传文件,不访问网络。录制完成后只返回本机临时文件路径,由业务方自行决定后续上传、压缩或保存逻辑。

安装和打包

  1. 将插件导入 uni-app 项目的 uni_modules 目录。
  2. 在 HBuilderX 中重新制作 iOS 自定义基座,或直接进行 iOS 云打包。
  3. 使用真机调试。相机能力无法在普通浏览器、H5 或 iOS 模拟器中完整验证。

基本用法

import { recordPortraitVideo } from '@/uni_modules/snowfee-ios-portrait-video-recorder'

recordPortraitVideo({
  success: (res) => {
    console.log('视频路径:', res.tempFilePath)
    console.log('封面路径:', res.posterPath)
    console.log('视频时长:', res.duration)
    console.log('文件大小:', res.size)
  },
  fail: (err) => {
    console.log(err.errCode, err.errMsg)
  }
})

完整示例

recordPortraitVideo({
  minDuration: 10,
  maxDuration: 180,
  cameraPosition: 'back',
  preset: 'high',
  enableAudio: true,
  flashMode: 'off',
  torchEnabled: false,
  posterTime: 0,
  texts: {
    record: 'Record',
    stop: 'Stop',
    retake: 'Retake',
    complete: 'Complete',
    cancel: 'Cancel',
    minDurationError: 'Video must be at least {seconds} seconds',
    switchCamera: 'Flip',
    flashOn: 'Flash On',
    flashOff: 'Flash Off'
  },
  success: (res) => {
    console.log(res.path)
    console.log(res.tempFilePath)
    console.log(res.posterPath)
    console.log(res.duration)
    console.log(res.size)
  },
  fail: (err) => {
    console.log(err.errCode, err.errMsg)
  },
  complete: (res) => {
    console.log('record complete', res)
  }
})

参数说明

参数 类型 默认值 说明
minDuration number 10 最短录制时长,单位秒。录制时长小于该值时,点击完成不会返回成功,会展示错误提示。
maxDuration number 180 最长录制时长,单位秒。录制达到该时长后自动停止,进入预览页。
cameraPosition string back 初始摄像头。可选值:backfront
preset string high 录制质量。可选值:highmediumlowhd1280x720hd1920x1080vga640x480。如果设备不支持指定质量,会回退到 high
enableAudio boolean true 是否录制声音。设置为 false 时不添加麦克风输入。
flashMode string off 初始补光灯状态。可选值:offon。视频录制使用 iOS torch 常亮模式,不是拍照瞬间闪光。
torchEnabled boolean false 是否默认打开补光灯。仅后置摄像头并且设备支持 torch 时生效。
posterTime number 0 截取封面图的时间点,单位秒。默认取视频第 0 秒。
texts object 内置英文文案 自定义原生录制界面按钮文案和错误提示。
success function - 录制完成并点击完成后触发。
fail function - 用户取消、权限失败、相机不可用等情况触发。
complete function - 成功或失败都会触发。

texts 文案说明

字段 默认值 说明
record Record 开始录制按钮文案
stop Stop 停止录制按钮文案
retake Retake 重拍按钮文案
complete Complete 完成按钮文案
cancel Cancel 取消按钮文案
minDurationError Video must be at least {seconds} seconds 最短时长错误提示,支持 {seconds} 占位符
switchCamera Flip 切换摄像头按钮文案
flashOn Flash On 补光灯开启状态文案
flashOff Flash Off 补光灯关闭状态文案

success 返回值

{
  path: string
  tempFilePath: string
  duration: number
  size: number
  type: string
  posterPath?: string
}
字段 类型 说明
path string 本地视频文件路径
tempFilePath string 本地视频文件路径,兼容 uni-app 常用字段
duration number 视频时长,单位秒
size number 文件大小,单位 byte
type string 固定为 video
posterPath string 本地封面图路径。封面生成失败时可能为空字符串。

fail 返回值

{
  errCode: number
  errMsg: string
}

常见错误码:

错误码 说明
10002 当前设备相机不可用
10003 相机权限被拒绝
10004 无法获取当前页面控制器
10005 摄像头不可用
10006 摄像头输入创建失败
10007 用户取消录制
10008 录制文件生成失败
10009 麦克风输入创建失败

关于补光灯

iOS 视频录制不使用拍照时的瞬间闪光灯,而是使用后置摄像头的 torch 常亮模式。也就是说:

  • flashMode: 'on' 会尝试打开后置摄像头补光灯
  • torchEnabled: true 也会尝试打开后置摄像头补光灯
  • 前置摄像头通常没有 torch,因此切换到前置摄像头时补光灯不会生效
  • 部分设备或系统状态下可能禁用 torch,例如设备过热、电量过低、相机被其他模块占用等

注意事项

  • 插件只支持 iOS App 端,需要使用自定义基座或云打包后在真机验证。
  • 如果业务还需要压缩视频,建议录制完成后再调用单独的视频压缩插件或业务压缩流程。
  • maxDuration 使用原生录制时长限制,到达最长时长后会自动停止录制。
  • minDuration 在录制后的完成按钮处校验,时长不足时用户可以选择重拍。
  • 返回的视频是本地临时文件,业务方上传完成后可按需清理。
  • 插件内部不上传、不压缩、不持久化保存视频文件。

隐私、权限声明

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

NSCameraUsageDescription, NSMicrophoneUsageDescription

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

本插件不采集用户数据,不向任何服务器发送数据。插件仅在用户主动调用录制功能时使用设备相机和麦克风录制本地视频,并将本地临时视频文件路径、视频时长、文件大小和封面图路径返回给应用。后续上传、保存或删除操作由接入方应用自行处理。

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