鸿蒙开发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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/409897.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索全球设计灵感:六大海外设计平台

海外设计网站对于设计师而言&#xff0c;不仅是灵感的源泉&#xff0c;更是专业成长的加速器。这些平台聚集了全球创意人士&#xff0c;提供了一个分享和发现最新设计趋势的环境。设计师可以通过这些网站学习行业内的创新技术&#xff0c;参与设计挑战&#xff0c;提升个人设计…

基于Python的顾客购物数据可视化分析

数据可视化分析实验 数据集简介 本文在实验中考虑到实验使用设备的性能和环境的局限性&#xff0c;采用了kaggle官网上的的消费者购物数据集&#xff0c;数据地址&#xff1a; https://www.kaggle.com/datasets/iamsouravbanerjee/customer-shopping-trends-dataset。 此数据…

Stable Diffusion AI绘画工具的安装与配置(MAC用户)

AI绘画的热潮席卷了整个创意行业&#xff0c;Stable Diffusion作为其中的翘楚&#xff0c;让艺术创作变得前所未有的简单。然而&#xff0c;对于使用Mac电脑用户来说&#xff0c;安装和配置Stable Diffusion可能显得有些棘手。别担心&#xff0c;这份详细的教程将手把手教你如何…

多功能秒达工具箱全开源源码,可自部署且完全开源的中文工具箱

简介&#xff1a; 多功能秒达开源工具箱源码&#xff0c;&#xff0c;可自部署且完全开源的中文工具箱&#xff0c;永远的自由软件&#xff0c;轻量级运行&#xff0c;全平台支持&#xff08;包括ARMv8&#xff09;&#xff0c;完全类似 GPT 的支持&#xff0c;与高效的 UI 高…

【Java】—— Java面向对象基础:编程实例(学生信息管理)

目录 场景描述 定义学生类 创建学生对象并处理需求 代码解析 总结 在Java中&#xff0c;面向对象编程&#xff08;OOP&#xff09;是一种常用的编程范式&#xff0c;它允许我们创建基于现实世界的模型&#xff0c;通过类和对象来模拟这些模型。今天&#xff0c;我们将通过…

刘海屏的优雅回归?华为Mate 70 Pro定义新美学

在智能手机的发展历程中&#xff0c;华为Mate系列一直是高端旗舰的代表。而今&#xff0c;华为Mate 70 Pro的神秘面纱终于揭开&#xff0c;其回归的刘海屏设计和独特的寰宇舷窗设计&#xff0c;再次将华为的设计理念推向了新的高度。 刘海屏的回归&#xff1a;经典与创新的融合…

后端微服务与分布式系统

编写一篇关于后端微服务和分布式系统的文档&#xff0c;需要详细讨论微服务架构的核心概念、优缺点、关键技术&#xff0c;以及在分布式系统中的应用。以下是文档的大纲和内容概述&#xff1a; 后端微服务与分布式系统 1. 简介 微服务架构是一种将大型应用程序分解为一系列小…

【AI绘画】Midjourney前置/imagine与单图指令详解

文章目录 &#x1f4af;Midjourney前置指令/imagine什么是前置指令&#xff1f;/imaginepromptUpscale(放大)Variations&#xff08;变化&#xff09;&#x1f504;&#xff08;重新生成一组图片&#xff09; &#x1f4af;单张图片指令Upscale (细节优化)Vary&#xff08;变体…

COMSOL工业碱性电解槽(3D、双欧拉模型)

本案例通过改写COMSOL官方案例获得&#xff0c;使用了碱性电解槽和欧拉-欧拉&#xff08;湍流&#xff09;模型&#xff0c;阳极室和阴极室带有乳突状的结构&#xff0c;模型进行了人为缩小&#xff0c;仅供参考。其中一些参数可参考如下链接文章的说明。COMSOL碱性电解槽参数解…

public继承

三种继承的方法:public 继承/private继承/protected继承详解及区别_public继承-CSDN博客 公有继承的特点是基类的公有成员和保护成员作为派生类的成员时&#xff0c;它们都保持原有的状态&#xff0c;而基类的私有成员仍然是私有的&#xff0c;不能被基类的子类所访问。 错误…

关键点检测——HRNet原理详解篇

&#x1f34a;作者简介&#xff1a;秃头小苏&#xff0c;致力于用最通俗的语言描述问题 &#x1f34a;专栏推荐&#xff1a;深度学习网络原理与实战 &#x1f34a;近期目标&#xff1a;写好专栏的每一篇文章 &#x1f34a;支持小苏&#xff1a;点赞&#x1f44d;&#x1f3fc;、…

Windows上安装 nodejs,npm 和 yarn详细教程

1、下载Node.js 访问Node.js 官网下载&#xff0c;下载需要版本版本&#xff0c;具体操作如下 2、安装Node.js 具体安装可参考以下知乎教程 https://www.zhihu.com/question/591831850/answer/3423661990 3、配置淘宝镜像 npm config set registry https://registry.npmmirror…

UWB Tag钥匙防丢器,精准定位测距,一键找回!告别钥匙遗失焦虑

在这个快节奏的时代&#xff0c;我们每天穿梭于家、办公室、商场之间&#xff0c;手中的钥匙串仿佛成了连接生活各个角落的纽带。但你是否也曾有过这样的经历&#xff1a;匆忙间&#xff0c;那串沉甸甸的钥匙似乎在某个不经意的瞬间与你“不辞而别”&#xff0c;留下的是无尽的…

如何将本地jar包导入到maven仓库中

需要将本地的 JAR 包安装到你的本地 Maven 仓库中&#xff0c;可以使用 mvn install:install-file 命令来完成这一步。 1.打开终端或命令行 2.运行以下命令&#xff0c;将 JAR 文件安装到本地 Maven 仓库&#xff1a; mvn install:install-file -Dfilepath/to/your/com.magu…

APP.vue引入子组件进行页面展示

一.将vue项目启动服务器原始页面进行清空 打开APP.vue文件&#xff0c;将<template>标签里的内容和<style>标签里的内容 ctrl/ 选中进行注释&#xff0c;以及引入的Helloworld.vue文件内容代码进行注释 并且 ctrls 保存 服务器页面从原始页面 变为空白 二.在comp…

基于微信小程序的行李寄存管理系统的设计与实现(论文+源码)_kaic

基于微信小程序的行李寄存管理系统的设计与实现(论文源码)_kaic 摘 要 人们外出旅行的时候&#xff0c;经常会需要到行李寄存的服务。行李寄存处在全国各地都很常见。现存的行李寄存方式很传统&#xff0c;适合小规模的行李寄存&#xff0c;当行李数量较多时&#xff0c;就…

ssrf+redis未授权访问漏洞复现

目录 靶场搭建 报错问题解决 组合利用 使用goherus生成payload 靶场搭建 首先我们进入ubutuo拉取靶场 docker run -d -p 8765:80 8023/pikachu-expect:latest 报错问题解决 如果出现docker报错&#xff0c;靶场一直拉取不下来 解决办法&#xff1a;配置镜像加速器 vim /et…

Linux简单介绍(2)

四、软件管理机制 4.1 Linux软件管理介绍 有一个很好的软件生态圈支持&#xff0c;才是一个优秀、值得广泛使用的操作系统平台。比如PC端的window操作系统、mac操作系统&#xff0c;手机端的IOS系统&#xff0c;Android系统等。在这些操作系统上安装软件&#xff0c;方便的不能…

Golang测试func TestXX(t *testing.T)的使用

一般Golang中的测试代码都以xxx_test.go的样式&#xff0c;在命名测试函数的时候以Testxx开头。 以下是我写的一个单元&#xff1a; package testsimport "strings"func Split(s, sep string) (res []string) {i : strings.Index(s, sep)for i > -1 {res append…

Furion+SqlSugar环境配置与项目创建

一、速通一图流 二、安装 .NET 8 1. 下载与安装 .NET 8 SDK 访问 .NET 下载页面 并下载最新版本的 .NET 8 SDK。根据操作系统选择适合的安装包&#xff08;如 Windows、macOS 或 Linux&#xff09;&#xff0c;并按照提示完成安装。 2. 验证安装 打开终端或命令提示符&…