鸿蒙开发5.0【基于CameraKit,通过avrecorder进行录像】

2024-08-27 01:28

本文主要是介绍鸿蒙开发5.0【基于CameraKit,通过avrecorder进行录像】,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 场景描述

录像是相机应用的最重要功能之一,录像是循环帧的捕获。本文通过CameraKit自定义相机并通过avrecorder进行录像。

2 效果图

1

3 自定义相机录像流程图

2

4 方案描述

4.1 整体描述:

总体可分为:1、相机输入,2、同时输出预览流+录像流

1、通过cameraInputt,获取相机采集数据,创建相机输入

2、创建previewOutput,获取预览输出流,通过xcomponent的surfaceid连接,送显xcomponent

3、通过AVrecorder的surfaceid创建录像输出流VideoOutput输出到文件中

4.2 步骤一:通过CameraManager获取相机管理对象

1、创建CameraManager对象

let cameraManager: camera.CameraManager = camera.getCameraManager(context);

2、通过getSupportedCameras 获取相机列表

let cameraArray: Array<camera.CameraDevice> = cameraManager.getSupportedCameras();

3、通过getSupportedSceneModes获取支持的模式类型

let sceneModes: Array<camera.SceneMode> = cameraManager.getSupportedSceneModes(cameraArray[0]);

4.3 步骤二:通过 cameraManager.createCameraInput获取相机输入

创建相机输入

let cameraInput: camera.CameraInput = cameraManager.createCameraInput(cameraArray[0]);

4.4 步骤三:通过cameraManager.createPreviewOutput获取预览输出流

let previewOutput: camera.PreviewOutput = cameraManager.createPreviewOutput(previewProfilesArray[0], surfaceId);

4.5 步骤四:获取录像输出流

4.5.1 步骤一:创建avRcorder的surface

let avRecorder: media.AVRecorder = await media.createAVRecorder();let videoSurfaceId = await avRecorder.getInputSurface();

4.5.2 步骤二: 配置AVRecorderProfile信息

let aVRecorderProfile: media.AVRecorderProfile = {fileFormat : media.ContainerFormatType.CFT_MPEG_4, // 视频文件封装格式,只支持MP4videoBitrate : 100000, // 视频比特率videoCodec : media.CodecMimeType.VIDEO_AVC, // 视频文件编码格式,支持avc格式videoFrameWidth : 640, // 视频分辨率的宽videoFrameHeight : 480, // 视频分辨率的高videoFrameRate : 30 // 视频帧率};

4.5.3 步骤三:创建视频录制的参数

let aVRecorderConfig: media.AVRecorderConfig = {videoSourceType: media.VideoSourceType.VIDEO_SOURCE_TYPE_SURFACE_YUV,profile: aVRecorderProfile,url: "fd://" + file.fd,//获取文件的fd,且创建的文件要有读写权限rotation: 90 // 90°为默认竖屏显示角度,如果由于设备原因或应用期望以其他方式显示等原因,请根据实际情况调整该参数};

注:预览流与录像输出流的分辨率的宽(videoFrameWidth)高(videoFrameHeight)比要保持一致

4.5.4 步骤四:创建avrecorder和录像输出流videoOutput

// 创建avRecorderlet avRecorder: media.AVRecorder = await media.createAVRecorder();// avRecorder准备avRecorder.prepare(aVRecorderConfig);// 创建VideoOutput对象let videoOutput: camera.VideoOutput | undefined = undefined;// createVideoOutput传入的videoProfile对象的宽高需要和aVRecorderProfile保持一致。let videoProfile: undefined | camera.VideoProfile = videoProfilesArray.find((profile: camera.VideoProfile) => {return profile.size.width === aVRecorderProfile.videoFrameWidth && profile.size.height === aVRecorderProfile.videoFrameHeight;});videoOutput = cameraManager.createVideoOutput(videoProfile, videoSurfaceId);

4.6 步骤五:会话配置

//创建会话let videoSession: camera.CaptureSession | undefined = undefined;videoSession.beginConfig();// 向会话中添加相机输入流videoSession.addInput(cameraInput);// 向会话中添加预览输出流videoSession.addOutput(previewOutput);// 向会话中添加录像输出流videoSession.addOutput(videoOutput);// 提交会话配置videoSession.commitConfig();// 启动会话videoSession.start();

4.7 步骤六:开始、停止录像

// 启动录像输出流videoOutput.start()// 开始录像avRecorder.start();// 停止录像avRecorder.stop();

4.8 步骤七:释放资源

// 停止当前会话videoSession.stop();// 释放相机输入流cameraInput.close();// 释放预览输出流previewOutput.release();// 释放录像输出流videoOutput.release();// 释放会话videoSession.release();// 会话置空videoSession = undefined;

以上就是本篇文章所带来的鸿蒙开发中一小部分技术讲解;想要学习完整的鸿蒙全栈技术。可以在结尾找我可全部拿到!
下面是鸿蒙的完整学习路线,展示如下:
1

除此之外,根据这个学习鸿蒙全栈学习路线,也附带一整套完整的学习【文档+视频】,内容包含如下

内容包含了:(ArkTS、ArkUI、Stage模型、多端部署、分布式应用开发、音频、视频、WebGL、OpenHarmony多媒体技术、Napi组件、OpenHarmony内核、鸿蒙南向开发、鸿蒙项目实战)等技术知识点。帮助大家在学习鸿蒙路上快速成长!

鸿蒙【北向应用开发+南向系统层开发】文档

鸿蒙【基础+实战项目】视频

鸿蒙面经

2

为了避免大家在学习过程中产生更多的时间成本,对比我把以上内容全部放在了↓↓↓想要的可以自拿喔!谢谢大家观看!
3

这篇关于鸿蒙开发5.0【基于CameraKit,通过avrecorder进行录像】的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1110247

相关文章

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

SpringBoot使用minio进行文件管理的流程步骤

《SpringBoot使用minio进行文件管理的流程步骤》MinIO是一个高性能的对象存储系统,兼容AmazonS3API,该软件设计用于处理非结构化数据,如图片、视频、日志文件以及备份数据等,本文... 目录一、拉取minio镜像二、创建配置文件和上传文件的目录三、启动容器四、浏览器登录 minio五、

你的华为手机升级了吗? 鸿蒙NEXT多连推5.0.123版本变化颇多

《你的华为手机升级了吗?鸿蒙NEXT多连推5.0.123版本变化颇多》现在的手机系统更新可不仅仅是修修补补那么简单了,华为手机的鸿蒙系统最近可是动作频频,给用户们带来了不少惊喜... 为了让用户的使用体验变得很好,华为手机不仅发布了一系列给力的新机,还在操作系统方面进行了疯狂的发力。尤其是近期,不仅鸿蒙O

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

python-nmap实现python利用nmap进行扫描分析

《python-nmap实现python利用nmap进行扫描分析》Nmap是一个非常用的网络/端口扫描工具,如果想将nmap集成进你的工具里,可以使用python-nmap这个python库,它提供了... 目录前言python-nmap的基本使用PortScanner扫描PortScannerAsync异

C#图表开发之Chart详解

《C#图表开发之Chart详解》C#中的Chart控件用于开发图表功能,具有Series和ChartArea两个重要属性,Series属性是SeriesCollection类型,包含多个Series对... 目录OverviChina编程ewSeries类总结OverviewC#中,开发图表功能的控件是Char

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类

这15个Vue指令,让你的项目开发爽到爆

1. V-Hotkey 仓库地址: github.com/Dafrok/v-ho… Demo: 戳这里 https://dafrok.github.io/v-hotkey 安装: npm install --save v-hotkey 这个指令可以给组件绑定一个或多个快捷键。你想要通过按下 Escape 键后隐藏某个组件,按住 Control 和回车键再显示它吗?小菜一碟: <template