基于Camera Kit,获取相机流数据传递给native,进行压缩编码
ATS侧启动相机,使用摄像头采集视频流数据,获取相机视频流数据传递到native侧,通过buffer模式将视频编码成MP4文件保存到沙箱路径。
HarmonyOS
赞
收藏 0
回答 1
待解决
相关问题
HarmonyOS Camera Kit(相机服务)预览输出流与相片输出流不一致
45浏览 • 1回复 待解决
#鸿蒙通关秘籍#如何在鸿蒙中使用IPC Kit进行跨进程数据传递?
67浏览 • 1回复 待解决
如何在鸿蒙系统中实现基于 Intent 的数据传递?
214浏览 • 0回复 待解决
HarmonyOS 数据传递问题
451浏览 • 1回复 待解决
如何连续获取相机预览流数据
702浏览 • 1回复 待解决
HarmonyOS 视频流数据传输
447浏览 • 1回复 待解决
HarmonyOS 前端采集 arraybuffer 如何传递给 c++ 用以编码?
38浏览 • 1回复 待解决
HarmonyOS router.getParams()数据传递
494浏览 • 1回复 待解决
基于CameraKit对相机进行操作
692浏览 • 1回复 待解决
HarmonyOS 关于Provide数据传递问题咨询
411浏览 • 1回复 待解决
实现文件解压缩和数据流解压缩
1484浏览 • 1回复 待解决
获取图片的pixelMap后,传递给下一个页面后,获取传递的pixelMap数据不对
1700浏览 • 1回复 待解决
HarmonyOS 请问如何获取到相机的内容数据流?
207浏览 • 1回复 待解决
camera 获取预览数据
1828浏览 • 1回复 待解决
HarmonyOS Camera kit 双路预览方案频繁开关相机底层崩溃
396浏览 • 1回复 待解决
使用XComponent组件显示相机的预览输出流时,如何获取相机的帧数据
2765浏览 • 1回复 待解决
HarmonyOS camera预览退后台,不输出相机数据
389浏览 • 1回复 待解决
多hap调用及数据传递,有人知道吗?
1031浏览 • 1回复 待解决
openharmoney相机预览流获取,且如何实时获取到预览流的byte数组
2420浏览 • 0回复 待解决
HarmonyOS 如何将 CanvasRenderingContext2D 对象传递给 native c++
55浏览 • 1回复 待解决
HarmonyOS 拍照功能能否直接调用系统相机,还是只有通过Camera kit去自己封装
611浏览 • 1回复 待解决
#鸿蒙通关秘籍# 如何通过CustomDialog实现页面间的数据传递?
90浏览 • 0回复 待解决
两个UIAbility之间可通过哪些方法实现数据传递
2206浏览 • 1回复 待解决
具体实现步骤可分为:
Step1:申请权限,启动相机。
Step2: 启动录制,获取视频流数据,获取一帧图像转成JPG格式保存到沙箱路径。
Step3: 视频流数据传递到native侧,进行压缩编码,生成文件保存。
步骤一: 申请权限,启动相机。需要相机、麦克风、媒体位置、写入媒体和读取媒体权限。
2:启动相机,预览实现。导入camera接口,创建双路预览流通道,使用XComponent组件和ImageReceiver组件创建Surface用来显示和获取预览图像。
步骤二:启动录制,获取相机视频流数据。
1:生成相机视频流数据:视频流数据是通过在onPageShow里面启动本地录制生成,当页面显示时,会调用 startRecord()方法开始录制,在页面隐藏时,调用 stopRecorder()函数停止录制视频,并释放相机资源。
2: 获取相机视频流数据通过imageReceiver获取相机流数据,Videocompressor.pushoneframedata(buffer) 接收buffer数据。
3:再此基础上获取一帧图像转成JPG格式保存到沙箱路径。
获取图像数据,使用imagePackerApi接口将图像数据打包成JPG格式。
步骤三:视频流数据传递到native侧,进行压缩编码。
1:native侧和JS侧交互实现,创建一个VideoCompressor类实例绑定到JS对象中。
Videocompressor在JS侧自定义封装的对象,里面包含启动本地录制方法。
native侧自定义封装一个视频录制管理器类,包含启动本地录制方法。
2:接收JS侧数据。
成功推送一帧视频数据后,pushOneFrameData函数会将一帧数据推送到编码器中进行编码。
3:编码使用的是buffer模式,编码过程分为创建编码器实例对象 --> 设置编码器回调函数 --> 启动编码器,开始编码 --> 写入编码码流 -->将数据推入编码器的输入队列中进行编码 --> 编码完成通知编码器码流结束 --> 输出编码帧 --> 销毁编码器实例,释放资源。
3.1: 创建编码器实例对象,创建回调函数。
3.2 设置回调函数SetVideoEncoderCallback,可以通过处理该回调报告的信息,确保编码器正常运转。
3.3:编码器就绪,开始编码。
3.4:写入编码码流。
3.5 将数据推入编码器的输入队列中进行编码。
3.6:编码完成通知编码器码流结束。
3.7:输出编码帧,拿到编码后的数据。
3.8:数据写入到输出文件中保存。