实时预览录制使用指导

← 返回实时预览录制组件参考 · 全部使用指导

实时预览录制使用指导

不可见组件:在 App 内用摄像头录制视频(不跳转到系统相机),有两种模式,由后台录制(BackgroundMode)属性决定:

  预览模式(默认,不勾选后台录制) 后台录制模式(勾选后台录制)
画面 在指定布局里显示摄像头实时画面 不显示画面
开始录制前 先调用初始化预览(容器)(InitializeCamera),等预览已启动(CameraPreviewStarted) 什么都不用做,直接开始录制(StartRecording)
App 最小化 / 锁屏 录制中断 继续录
切换摄像头 录制前可调用切换摄像头(SwitchCamera) 开始前设置使用前置摄像头(UseFrontCamera)
闪光灯 预览后可调用设置闪光灯(开启)(EnableFlash) 开始前设置开启闪光灯(FlashOn)
声音 录制中可静音(MuteRecording) / 取消静音(UnMuteRecording) 开始前设置录制声音(RecordAudio),中途不能改
拍照(CapturePhoto) 画面显示中、未录制时可拍(完整分辨率) 录制中拍照,不打断录制
停止录制后 画面继续显示,可以接着录 关闭摄像头
典型用途 自拍录像、拍视频发帖、自定义拍照界面 行车记录、定时监控

两种模式都支持画质/码率/帧率设置、暂停录制(PauseRecording) / 恢复录制(ResumeRecording)、取消录制(CancelRecording), 结束后都触发录制完成(视频路径)(VideoRecorded)返回视频路径。下面每个属性、事件、方法都注明了适用的模式,没注明的两种模式都可用。

使用前先用屏幕的「请求权限」申请相机权限;录制声音(RecordAudio)为真时还需要录音权限。 录好的视频保存在应用专属目录(不需要存储权限),录制期间屏幕保持常亮。原 VideoRecorder 拓展的前台、后台两个组件已合并内置为本组件。

鸿蒙上只能用预览模式:系统不允许应用在后台使用摄像头,勾选后台录制(BackgroundMode)会报错;录制中也不能静音(MuteRecording),要不录声音请在开始前把录制声音(RecordAudio)设为假。画面一律等比居中显示。

快速上手:预览模式

  1. 拖一个实时预览录制、一个垂直布局(改名 垂直布局_预览,宽「充满」、高 400 像素)当预览区, 再放 按钮_录制、按钮_停止、一个视频播放器;
  2. 搭下面的代码块:

各案例独立使用;组合到同一屏幕时,将同名事件的处理合并到一个事件积木中。

when Screen1.Initialize() {
  Screen1.AskForPermission("android.permission.CAMERA")
  Screen1.AskForPermission("android.permission.RECORD_AUDIO")
}

when Screen1.PermissionGranted(权限名称) {
  if 权限名称 == "android.permission.CAMERA" {
    实时预览录制1.InitializeCamera(垂直布局_预览)
  }
}

when 按钮_录制.Click() {
  实时预览录制1.StartRecording()
}

when 按钮_停止.Click() {
  实时预览录制1.StopRecording()
}

when 实时预览录制1.VideoRecorded(视频路径) {
  视频播放器1.Source = 视频路径
  视频播放器1.Start()
}

when 实时预览录制1.ErrorOccurred(错误信息) {
  对话框1.ShowAlert(错误信息)
}

运行后同意权限,预览区出现摄像头画面;点「录制」开始,点「停止」保存并在视频播放器里播放。

自定义拍照界面:不录像也能用。在上面的基础上加一个 按钮_拍照 和一个图像,点按钮拍下完整分辨率的照片:

when 按钮_拍照.Click() {
  实时预览录制1.CapturePhoto()
}

when 实时预览录制1.PhotoCaptured(文件路径) {
  图像1.Picture = 文件路径
}

when 实时预览录制1.PhotoCaptureError(消息) {
  对话框1.ShowAlert(消息)
}

快速上手:后台录制模式

  1. 拖一个实时预览录制,在属性面板勾选后台录制;不需要预览布局。 再放 按钮_开始、按钮_停止、按钮_拍照、一个图像、一个标签;
  2. 搭下面的代码块:
when Screen1.Initialize() {
  Screen1.AskForPermission("android.permission.CAMERA")
}

when 按钮_开始.Click() {
  实时预览录制1.RecordAudio = false
  实时预览录制1.StartRecording()
}

when 按钮_停止.Click() {
  实时预览录制1.StopRecording()
}

when 按钮_拍照.Click() {
  实时预览录制1.CapturePhoto()
}

when 实时预览录制1.PhotoCaptured(文件路径) {
  图像1.Picture = 文件路径
}

when 实时预览录制1.VideoRecorded(视频路径) {
  标签1.Text = join("已保存:", 视频路径)
}

when 实时预览录制1.ErrorOccurred(错误信息) {
  标签1.Text = 错误信息
}

点「开始」后按 Home 键把 App 切到后台,录制继续;回来点「停止」保存。 这里关掉了录制声音,所以只需要相机权限。录制中点「拍照」不会打断录制。

搭建与测试

在设计器拖入本组件和案例涉及的按钮、标签、布局等组件,按案例中的名称重命名。先运行最小案例,确认事件返回,再增加业务逻辑。示例中的素材先上传到项目,服务器地址、令牌、文件路径换成自己的值。

可见组件需要有非零宽高;不可见工具组件必须由属性或方法启动。设计器展示样式不等于运行时已加载数据或绑定目标。联机测试应使用包含本组件的 AI 伴侣;涉及系统入口或权限的行为还要编译安装后验证。

属性、方法与事件速查

完整参数类型、默认值和平台说明见组件参考。下表按调用入口列出用途;有完成事件的方法在事件中读取结果。

入口 用途
宽高比(AspectRatio) 预览画面的宽高比(仅预览模式)
音频码率(AudioBitRate) 音频编码码率(bps),默认128000。建议64000~320000。录制前设置有效。
后台录制(BackgroundMode) 后台录制。不勾选(默认)为预览模式:需先「初始化预览」显示画面再录制,App 切到后台时录制会中断。勾选后为后台录制模式:不显示画面、不用初始化预览,直接「开始录制」,App 最小化或锁屏后继续录,录制中可「录制中拍照」。要在开始录制前设置;预览打开时不能切换到后台录制(先「关闭预览」)。
视频码率(BitRate) 视频编码码率(bps)。0=自动根据分辨率计算,建议2000000~12000000。录制前设置有效。
摄像头方向(CameraOrientation) 摄像头方向。自动=系统检测。录制前设置有效。
自动对焦特性(FeatureAutofocusCamera) 自动对焦特性标识
后置摄像头特性(FeatureBackCamera) 后置摄像头特性标识
闪光灯特性(FeatureCameraFlash) 闪光灯特性标识
前置摄像头特性(FeatureFrontCamera) 前置摄像头特性标识
开启闪光灯(FlashOn) 是否开启闪光灯(补光常亮)。在开始录制前设置;预览模式录制前也可用「设置闪光灯」方法切换。
帧率(FrameRate) 视频帧率。录制前设置有效。
质量(Quality) 视频画质预设。也可在代码块中输入自定义值如 1920x1080。录制前设置有效。
录制声音(RecordAudio) 是否录制音频。录制前设置有效。
录制时长(RecordingDuration) 当前录制时长(毫秒),不含暂停时间,未录制时返回 0
缩放方式(ScaleType) 预览画面的缩放方式(仅预览模式)
使用前置摄像头(UseFrontCamera) 是否使用前置摄像头。预览模式在「初始化预览」前设置(之后用「切换摄像头」);后台录制模式在开始录制前设置。
取消录制(CancelRecording) 取消录制:停止并删除这段视频,不触发「录制完成」,而是触发「出现错误时」(录制已取消)。两种模式都可用
拍照(CapturePhoto) 拍一张照片,保存到应用专属目录,成功触发「拍照完成」返回图片路径,失败触发「拍照失败」。预览模式:画面显示中、未录制时可拍(完整分辨率,可做自定义拍照界面);后台录制模式:录制中拍照,不打断录制
设置闪光灯(开启)(EnableFlash) 打开或关闭闪光灯,预览显示后使用(仅预览模式;后台录制模式请在开始前设置「开启闪光灯」)
获取支持的画质(GetSupportedVideoQualities) 获取当前摄像头支持的画质列表
有录音权限(HasRecordAudioPermission) 检查是否有录音权限
初始化预览(容器)(InitializeCamera) 打开摄像头,把画面显示在指定布局里(仅预览模式,录制前先调用;后台录制模式不需要也不能调用)
支持特性(特征)(IsFeatureAvailable) 检查设备是否支持指定特性(back_camera/front_camera/flash/autofocus)
闪光灯已开启(IsFlashOn) 查询闪光灯是否开启
静音(MuteRecording) 录制中静音:视频继续录,之后不再录声音(仅预览模式;后台录制模式请在开始前设置「录制声音」)
暂停录制(PauseRecording) 暂停录制,触发「录制已暂停」,之后用「恢复录制」继续,暂停的这段不计入视频(需要 Android 7.0 及以上)。两种模式都可用
请求录音权限(RequestRecordAudioPermission) 跳转到系统应用权限设置页面,引导用户开启录音权限
恢复录制(ResumeRecording) 从暂停处继续录制,触发「录制已恢复」。两种模式都可用
开始录制(StartRecording) 开始录制。预览模式要先「初始化预览」;后台录制模式直接调用即可。「录制声音」为真时需要录音权限。开始后触发「录制已开始」
关闭预览(StopCamera) 关闭摄像头并移除预览画面(仅预览模式)
停止录制(StopRecording) 停止录制并保存视频,触发「录制完成」返回视频路径。预览模式下画面继续显示,后台录制模式下关闭摄像头
切换摄像头(SwitchCamera) 切换前后摄像头,录制中不能切换(仅预览模式;后台录制模式请在开始前设置「使用前置摄像头」)
取消静音(UnMuteRecording) 取消静音,恢复录声音(仅预览模式)
预览已启动(CameraPreviewStarted) 「初始化预览」成功、画面显示出来时触发(仅预览模式)
预览已停止(CameraPreviewStopped) 「关闭预览」后触发(仅预览模式)
摄像头已切换(是前置摄像头)(CameraSwitched) 「切换摄像头」完成时触发,参数为当前是否前置(仅预览模式)
出现错误时(错误信息)(ErrorOccurred) 发生错误时触发,参数是中文原因,例如没有摄像头权限、模式不对(后台录制模式调用了初始化预览)、录制已取消
拍照失败(消息)(PhotoCaptureError) 「录制中拍照」失败时触发,返回原因,例如当前不在后台录制中(仅后台录制模式)
拍照完成(文件路径)(PhotoCaptured) 「录制中拍照」成功时触发,返回照片文件路径(仅后台录制模式)
已静音(RecordingMuted) 「静音」生效时触发(仅预览模式)
录制已暂停(RecordingPaused) 录制暂停时触发
录制已恢复(RecordingResumed) 录制恢复时触发
录制已开始(RecordingStarted) 录制开始时触发
已取消静音(RecordingUnmuted) 「取消静音」生效时触发(仅预览模式)
录制完成(视频路径)(VideoRecorded) 视频录制完成并保存时触发,返回视频文件路径

常见问题与验收

检查项 操作与预期
初始化 对照案例检查是否已经调用加载、注册、连接或显示方法;仅拖入组件不会替你执行这些步骤。
结果返回 将成功事件和失败事件都接到标签,记录事件参数;异步操作完成前不读取结果属性。
输入配置 检查素材名大小写、网址是否为直接资源地址、文件是否存在、编号和索引是否在范围内。
平台与权限 按组件参考中的平台说明测试;授权被拒绝时应有明确提示,不继续假定操作成功。
最小案例 先验证页面中的最小案例,再验证第二个场景;重复操作、取消、返回屏幕后结果应符合事件说明。

完整 .aia 源码与操作指导

下载 .aia 源码

真实相机预览→录制→暂停/恢复→保存视频→应用内回放,并可拍照预览、测试相机特性、前后镜头、补光和权限恢复。默认前台模式,须用户点击才开启相机。鸿蒙不支持后台相机和录制中静音,FillCenter按等比居中显示;案例明确展示实际错误,不以编译通过代替设备验证。

导入 VideoRecorderAllFeatures.aia,连接最新伴侣,或编译独立安装包。真机/伴侣运行尚未实测。

API / 功能 操作入口 预期结果
InitializeCamera、CameraPreviewStarted、StopCamera、CameraPreviewStopped 初始化实际相机预览、关闭 真实画面和真实事件;不在启动时申请相机权限
StartRecording、RecordingStarted、StopRecording、VideoRecorded、RecordingDuration 默认配置初始化后录制5秒再停止回放 真实保存路径、真实视频播放和毫秒时长;不从调用推测成功
PauseRecording、ResumeRecording、RecordingPaused、RecordingResumed 录制中暂停2秒再恢复 仅真实事件更新状态,暂停时间不累计
CancelRecording 勾选确认后录制中取消 不生成可回放的新结果;无取消完成事件,测试后重开案例
SwitchCamera、CameraSwitched、UseFrontCamera 未录制的预览中切换;初始化前设前置 实际相机切换与前置参数,缺少前置硬件如实失败
EnableFlash、IsFlashOn、FlashOn 支持补光的后置相机上测试开关 实际灯与读取值;后台模式改属性需开始前设置
CapturePhoto、PhotoCaptured、PhotoCaptureError 预览未录制拍照;Android后台录制中拍照 真实照片路径及图片预览;不支持条件触发真实失败
MuteRecording、UnMuteRecording、RecordingMuted、RecordingUnmuted Android录制中静音和取消静音 实际声音比较与事件;鸿蒙如实报告暂不支持
RecordAudio、BackgroundMode、CameraOrientation、Quality、FrameRate、BitRate、AudioBitRate、AspectRatio、ScaleType 关闭预览后改中文选项/码率并应用 全部属性读回;默认前台最高、30帧、自动方向、完整居中;参数须设备支持
FeatureAutofocusCamera、FeatureBackCamera、FeatureCameraFlash、FeatureFrontCamera、IsFeatureAvailable、GetSupportedVideoQualities 硬件特性按钮及预览启动 实际硬件支持;未打开相机的画质列表可能只有预设
HasRecordAudioPermission、RequestRecordAudioPermission、ErrorOccurred 拒绝授权后读权限与重新申请 如实返回权限及错误,返回设置后再次读取;支持恢复

所有返回值均用于界面反馈,错误由底部错误区展示。设计器采用明确非默认配置,初始化与界面同步。API 覆盖检查按最终 AIA 检查方法、事件、属性读取与设置及设计器配置,不能替代真实设备验证。

相机预览录制与回放

导入方法:项目 → 导入项目(.aia)→ 选择下载的 .aia 源码文件。 真实相机预览→录制→暂停/恢复→保存视频→应用内回放,并可拍照预览、测试相机特性、前后镜头、补光和权限恢复。默认前台模式,须用户点击才开启相机。鸿蒙不支持后台相机和录制中静音,FillCenter按等比居中显示;案例明确展示实际错误,不以编译通过代替设备验证。 覆盖检查 67/67。首次载入及保存重开均0个错误,真实后台导入、安装包编译通过;真机/伴侣/硬件联调尚未实测。全部属性读写、方法与事件的操作入口和预期结果见组件指导。

文档反馈