VideoRecorder视频录制拓展- VideoRecorder — 前台模式(带预览)
- BackgroundVideoRecorder — 后台模式(无预览)
- 属性
- 事件
- 方法
- 编码参数参考
- 注意事项
- 问题解决历程
- 拓展下载
VideoRecorder视频录制拓展
拓展开发起由:有用户询问 千问Max版 说我们有视频录制拓展,经过沟通当时我们的确没做这款拓展,确认是 AI 的幻觉。后面又有另一个用户问到视频录制拓展,想做会议录制App,要可以调整码率实现视频体积压缩的功能。

经过调研,目前国外有一款视频录制拓展,不支持码率设置,一款后台视频录制拓展,支持码率设置,2款拓展均为收费拓展,国内很难购买,而且看起来不是很成熟,需要研究且质量无法保证。
然后我们决定自研一款视频录制拓展,包括但不限于以上功能。经过了一周的开发测试,我们这款拓展就诞生并上线了。期间用户也积极协助我们进行拓展的测试,经过了很多轮的测试打磨,终于质量趋于稳定,好用!!

导入拓展后:

组件对比
| VideoRecorder | BackgroundVideoRecorder | |
|---|---|---|
| 预览画面 | 有(需绑定布局组件) | 无 |
| 应用最小化 | 录制中断 | 录制继续 |
| 典型场景 | 用户主动录制、扫码录像 | 后台监控、静默录制 |
| 独有功能 | 摄像头切换、闪光灯、静音 | 取消录制、录制中截图 |
两者共享同一组编码属性(Quality、BitRate、FrameRate 等),录音权限逻辑相同。
注意:视频录制访问摄像头需要请求权限:

如果需要同时录制声音,也要请求声音权限。可以通过属性去掉录制声音的勾选,则为静音录制,此时无需申请声音权限:

VideoRecorder — 前台模式(带预览)
在布局中显示摄像头实时画面,录制视频。

参考代码块:

BackgroundVideoRecorder — 后台模式(无预览)
无预览画面,应用最小化后录制继续。适合后台监控、静默录制等场景。

参考代码块:

属性
通用属性(两个组件共享)
- UseFrontCamera
- 是否使用前置摄像头,默认
false - FlashOn
- 是否启用闪光灯,默认
false - CameraOrientation
- 摄像头方向(0/90/180/270),默认自动检测
- Quality
- 视频画质预设,默认
HIGHEST。支持HIGHEST、LOWEST、720P、1080P、480P、1920x1080等 - BitRate
- 视频编码码率(bps),默认
0自动根据分辨率计算。建议 2000000~12000000 - FrameRate
- 视频帧率,默认
30。支持 30/60 - AudioBitRate
- 音频编码码率(bps),默认
128000。建议 64000~320000 - RecordAudio
- 是否录制音频,默认
true - RecordingDuration
- 当前录制时长(毫秒),只读。未录制时返回
0,录制中返回已录制的毫秒数
VideoRecorder 专用属性
- ScaleType
- 预览缩放类型,
0=FillCenter,1=FitCenter(默认) - AspectRatio
- 宽高比,
0=4:3,1=16:9,-1=默认(默认)
只读常量
- FeatureBackCamera
- 后置摄像头特性标识,值为
"back_camera" - FeatureFrontCamera
- 前置摄像头特性标识,值为
"front_camera" - FeatureAutofocusCamera
- 自动对焦特性标识,值为
"autofocus" - FeatureCameraFlash
- 闪光灯特性标识,值为
"flash" - ScaleTypeFillCenter
- 填充居中缩放类型,值为
0 - ScaleTypeFitCenter
- 适应居中缩放类型,值为
1 - AspectRatio4n3
- 4:3 宽高比,值为
0 - AspectRatio16n9
- 16:9 宽高比,值为
1 - AspectRatioDefault
- 默认宽高比,值为
-1
事件
通用事件
- RecordingStarted()
- 录制开始时触发
- VideoRecorded(videoPath)
- 录制完成并保存时触发,参数为视频文件路径。默认路径为App的私有目录,无需额外权限申请:

如需将文件发送到其他位置,可以使用 文件管理器 组件拷贝文件,或使用 信息分享器 组件分享文件到其他App。
- RecordingPaused()
- 录制暂停时触发
- RecordingResumed()
- 录制恢复时触发
- ErrorOccurred(errorMsg)
- 发生错误时触发
VideoRecorder 事件
- CameraPreviewStarted()
- 预览启动时触发
- CameraPreviewStopped()
- 预览停止时触发
- CameraSwitched(isFrontCamera)
- 摄像头切换时触发
- RecordingMuted()
- 静音录制时触发
- RecordingUnmuted()
- 取消静音时触发
BackgroundVideoRecorder 事件
- PhotoCaptured(filePath)
- 录制中截图成功时触发
- PhotoCaptureError(message)
- 截图失败时触发
方法
通用方法
- StartRecording()
- 开始录制。根据
RecordAudio属性决定是否录制音频,录制音频时需要录音权限 - StopRecording()
- 停止录制并保存视频,触发
VideoRecorded事件 - PauseRecording()
- 暂停录制(需要 Android 7.0+)
- ResumeRecording()
- 恢复录制
- IsFeatureAvailable(feature)
- 检查设备是否支持指定特性。可选值:
back_camera、front_camera、flash、autofocus - GetSupportedVideoQualities()
- 获取当前摄像头支持的画质列表
- HasRecordAudioPermission()
- 检查是否有录音权限
- RequestRecordAudioPermission()
- 打开系统应用权限设置页面,引导用户开启录音权限
VideoRecorder 方法
- InitializeCamera(container)
- 在指定布局中初始化摄像头预览。container 为布局组件(如 VerticalArrangement)
- StopCamera()
- 关闭摄像头并移除预览画面
- SwitchCamera()
- 切换前后摄像头(录制中不可切换)
- EnableFlash(enable)
- 设置闪光灯状态,预览启动后使用
- IsFlashOn()
- 查询闪光灯是否开启
- MuteRecording()
- 静音录制(停止音频采集,视频继续录制)
- UnMuteRecording()
- 取消静音(恢复音频录制)
BackgroundVideoRecorder 方法
- CancelRecording()
- 取消录制并删除临时文件
- CapturePhoto()
- 录制中截图,自动保存到应用私有目录
编码参数参考
码率对照表(BitRate)
| 分辨率 | 建议码率 | 自动计算值 |
|---|---|---|
| 1080P (1920x1080) | 6~10 Mbps | 8 Mbps |
| 720P (1280x720) | 3~6 Mbps | 4 Mbps |
| 480P (720x480) | 1.5~3 Mbps | 2 Mbps |
| 更低 | 1~2 Mbps | 1.5 Mbps |
Quality 预设值
HIGHEST- 设备支持的最高分辨率LOWEST- 设备支持的最低分辨率1080P/720P/480P- 按高度匹配1920x1080/1280x720- 指定具体分辨率
注意事项
- 录制参数(码率/帧率/分辨率)在录制前设置,录制过程中不可修改
- 暂停/恢复需要 Android 7.0+
- VideoRecorder 录制中不可切换摄像头
- BackgroundVideoRecorder 录制中可截图(CapturePhoto)
- 需要摄像头和录音权限
问题解决历程
-
比较棘手的问题是竖屏和横屏切换,视频预览画面的自动调整问题,经过了多版本的调整,已经搞定。
-
手机预览画面充满布局,已经搞定。
-
屏幕初始化时使用前置摄像头:属性在录制前设定,经过测试 ok 的。
-
视频默认放 app 的私有目录无需请求额外文件访问权限,使用文件浏览器可以查看录制的.mp4 文件,暂时可以使用信息分享器组件把文件另存到相册或分享给其他 app。 后续考虑研究请求权限放相册中。
-
增加一个属性返回当前已录制了多长时间,已加上。
- 视频质量(quality)属性改为了下拉框,也可设置指定的文本:
- 设计器里是下拉框,可选:HIGHEST、LOWEST、1080P、720P、480P.
- 代码块里可以直接输入文本值,支持:预设:HIGHEST、LOWEST、1080P、720P、480P,自定义分辦率:1920×1080、1280x720 等。
- 用户提出录制时需要保持屏幕常亮,已搞定!
用户写了长长的感谢信:
标题: BackgroundVideoRecorder/VideoRecorder 视频录制扩展打磨:反复优化质量控制功能,必须狠狠表扬清泛!
正文内容: 在这里特意开帖,真诚、认真地表扬一位超靠谱、超有耐心的伙伴 ——清泛! 最初对接BackgroundVideoRecorder/VideoRecorder 视频录制扩展控件时,清泛就展现出了极强的专业能力,高效实现了基础录制功能,能稳定支持视频录制并调整质量参数,整体效果十分出彩。但后续我在查看成果后,针对录制逻辑、视频质量控制等细节提出了自己的疑问、个人想法以及多处优化诉求,原本只是抱着试试看的心态沟通,没想到得到了全程极致的耐心对接。 面对我的多次疑问和反复修改需求,清泛全程没有一丝敷衍、没有半点不耐烦。每一次的问题、每一处调整建议,都被认真倾听、逐一接纳。不管是视频分辨率、码率等质量参数的打磨、录制稳定性的优化,还是贴合我实际使用场景的功能微调改动,都不厌其烦地反复修改、多次精进,一次次迭代优化成品,尽全力贴合我的预期。 整个沟通过程中,清泛态度温和、响应及时,始终积极配合调整,极致严谨、精益求精的做事态度让人特别感动。不同于草草收尾的敷衍对接,真正做到了有问必答、有改必优,用心对待每一处细节、每一次诉求。 专业能力过硬,服务态度绝佳,包容耐心拉满,对待开发工作认真负责、极致用心。这样靠谱、有温度、肯深耕细节的伙伴,真的值得被大力看见、全力表扬! 再次感谢清泛的反复打磨与耐心付出!期待后续继续携手,带来更多优质、完美的成果!
拓展下载
收费拓展,请联系客服购买,会员享受五折优惠~
扫码添加客服咨询