实时预览录制使用指导
不可见组件:在 App 内用摄像头录制视频(不跳转到系统相机),有两种模式,由后台录制(BackgroundMode)属性决定:
| 预览模式(默认,不勾选后台录制) | 后台录制模式(勾选后台录制) | |
|---|---|---|
| 画面 | 在指定布局里显示摄像头实时画面 | 不显示画面 |
| 开始录制前 | 先调用初始化预览(容器)(InitializeCamera),等预览已启动(CameraPreviewStarted) |
什么都不用做,直接开始录制(StartRecording) |
| App 最小化 / 锁屏 | 录制中断 | 继续录 |
| 切换摄像头 | 录制前可调用切换摄像头(SwitchCamera) |
开始前设置使用前置摄像头(UseFrontCamera) |
| 闪光灯 | 预览后可调用设置闪光灯(开启)(EnableFlash) |
开始前设置开启闪光灯(FlashOn) |
| 声音 | 录制中可静音(MuteRecording) / 取消静音(UnMuteRecording) |
开始前设置录制声音(RecordAudio),中途不能改 |
拍照(CapturePhoto) |
画面显示中、未录制时可拍(完整分辨率) | 录制中拍照,不打断录制 |
| 停止录制后 | 画面继续显示,可以接着录 | 关闭摄像头 |
| 典型用途 | 自拍录像、拍视频发帖、自定义拍照界面 | 行车记录、定时监控 |
两种模式都支持画质/码率/帧率设置、暂停录制(PauseRecording) / 恢复录制(ResumeRecording)、取消录制(CancelRecording),
结束后都触发录制完成(视频路径)(VideoRecorded)返回视频路径。下面每个属性、事件、方法都注明了适用的模式,没注明的两种模式都可用。
使用前先用屏幕的「请求权限」申请相机权限;录制声音(RecordAudio)为真时还需要录音权限。
录好的视频保存在应用专属目录(不需要存储权限),录制期间屏幕保持常亮。原 VideoRecorder 拓展的前台、后台两个组件已合并内置为本组件。
鸿蒙上只能用预览模式:系统不允许应用在后台使用摄像头,勾选后台录制(BackgroundMode)会报错;录制中也不能静音(MuteRecording),要不录声音请在开始前把录制声音(RecordAudio)设为假。画面一律等比居中显示。
快速上手:预览模式
- 拖一个实时预览录制、一个垂直布局(改名
垂直布局_预览,宽「充满」、高 400 像素)当预览区, 再放按钮_录制、按钮_停止、一个视频播放器; - 搭下面的代码块:
各案例独立使用;组合到同一屏幕时,将同名事件的处理合并到一个事件积木中。
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(消息)
}
快速上手:后台录制模式
- 拖一个实时预览录制,在属性面板勾选后台录制;不需要预览布局。
再放
按钮_开始、按钮_停止、按钮_拍照、一个图像、一个标签; - 搭下面的代码块:
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 源码与操作指导
真实相机预览→录制→暂停/恢复→保存视频→应用内回放,并可拍照预览、测试相机特性、前后镜头、补光和权限恢复。默认前台模式,须用户点击才开启相机。鸿蒙不支持后台相机和录制中静音,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个错误,真实后台导入、安装包编译通过;真机/伴侣/硬件联调尚未实测。全部属性读写、方法与事件的操作入口和预期结果见组件指导。
扫码添加客服咨询