未验证 提交 8129a1f5 编写于 作者: O openharmony_ci 提交者: Gitee

!20907 修改获取源码步骤,以及一些格式问题。

Merge pull request !20907 from liyan/master
...@@ -148,7 +148,7 @@ OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及 ...@@ -148,7 +148,7 @@ OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及
1. 查找发行版。 1. 查找发行版。
1. 访问[DevEco Marketplace](https://repo.harmonyos.com/#/cn/home),设定搜索的对象为设备组件,并在左侧边栏选择开源发行版,如下图所示。 1. 访问[DevEco Marketplace](https://repo.harmonyos.com/#/cn/home),设定搜索的对象为设备组件,并在左侧边栏选择开源发行版,如下图所示。
2. 在搜索框输入关键字搜索,如“摄像头”。 2. 在搜索框输入关键字搜索,如“摄像头”。
3. 结果中显示与关键字匹配的发行版,可以进一步根据组件类别等过滤条件(如:适配的开发板,内核)精确筛选。 3. 结果中显示与关键字匹配的发行版,可以进一步根据组件类别等过滤条件(如:OS版本,适配的开发板,内核)精确筛选。
4. 查找合适的发行版,点击查看发行版的详情介绍。 4. 查找合适的发行版,点击查看发行版的详情介绍。
**图1** 包管理 **图1** 包管理
...@@ -158,7 +158,7 @@ OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及 ...@@ -158,7 +158,7 @@ OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及
2. 了解发行版详情。 2. 了解发行版详情。
1. 仔细阅读发行版的说明信息,以了解使用场景、特性、组件构成、使用方法以及如何进行定制化,如下图所示。 1. 仔细阅读发行版的说明信息,以了解使用场景、特性、组件构成、使用方法以及如何进行定制化,如下图所示。
2. 点击「直接下载」,将发行版下载到本地。 2. 点击「直接下载」,将发行版下载到本地。
3. 点击「定制组件」,将对发行版包含的组件进行定制(添加/删除)。 3. 点击「设备组件裁剪」,将对发行版包含的组件进行定制(添加/删除)。
**图2** 发行版示例 **图2** 发行版示例
...@@ -166,9 +166,11 @@ OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及 ...@@ -166,9 +166,11 @@ OpenHarmony是由开放原子开源基金会(OpenAtom Foundation)孵化及
3. 定制组件。 3. 定制组件。
1. 进入发行版的定制页面,如下图所示。 1. 进入发行版的定制页面,如下图所示。
2. 通过关闭开关移除可选组件,或者通过“添加组件”增加新的组件。 2. 添加和删除组件。
- 点击“可定制组件”后的添加按钮,在弹出的“添加组件”窗口中进行所需组件的添加。
- 在“可定制组件”下拉列表中,点击待删除组件后方的删除按钮,将该组件删除。
3. 在右边填写您的项目基本信息,包括名称、版本、描述等信息。 3. 在右边填写您的项目基本信息,包括名称、版本、描述等信息。
4. 点击下载,系统会根据您的选择,生成相应的OpenHarmony代码结构文件(如my_cust_dist.zip),保存至本地文件。 4. 点击页面右下角的「下载」,系统会根据您的选择,生成相应的OpenHarmony代码结构文件(如my_cust_dist.zip),保存至本地文件。
**图3** 组件定制 **图3** 组件定制
......
...@@ -28,12 +28,12 @@ ...@@ -28,12 +28,12 @@
- [窗口标题栏定制](subsys-arkui-customize_titlebar.md) - [窗口标题栏定制](subsys-arkui-customize_titlebar.md)
- 小型系统图形图像 - 小型系统图形图像
- [小型系统图形图像概述](subsys-graphics-overview.md) - [小型系统图形图像概述](subsys-graphics-overview.md)
- [普通组件开发指导](subsys-graphics-common-guide.md) - [普通组件开发指导](subsys-graphics-common-guide.md)
- [容器类组件开发指导](subsys-graphics-container-guide.md) - [容器类组件开发指导](subsys-graphics-container-guide.md)
- [布局容器类组件开发指导](subsys-graphics-layout-guide.md) - [布局容器类组件开发指导](subsys-graphics-layout-guide.md)
- [动画开发指导](subsys-graphics-animation-guide.md) - [动画开发指导](subsys-graphics-animation-guide.md)
- [Windows QT 模拟器使用指导](subsys-graphics-simulator-guide.md) - [Windows QT 模拟器使用指导](subsys-graphics-simulator-guide.md)
- [如何对接图形框架](subsys-graphics-porting-guide.md) - [如何对接图形框架](subsys-graphics-porting-guide.md)
- 媒体 - 媒体
- 相机 - 相机
- [相机开发概述](subsys-multimedia-camera-overview.md) - [相机开发概述](subsys-multimedia-camera-overview.md)
......
...@@ -22,7 +22,7 @@ AI引擎框架结构如下图所示。 ...@@ -22,7 +22,7 @@ AI引擎框架结构如下图所示。
### 代码管理规范 ### 代码管理规范
AI引擎框架包含client、server和common三个主要模块,其中client提供server端连接管理功能,北向SDK在算法对外接口中需封装调用client提供的公共接口;server提供插件加载以及任务管理等功能,各Plugin实现由server提供的插件接口,完成插件接入;common提供与平台相关的操作方法、引擎协议以及相关工具类,供其他各模块调用。 AI引擎框架包含client、server和common三个主要模块,其中client提供server端连接管理功能,OpenHarmony SDK在算法对外接口中需封装调用client提供的公共接口;server提供插件加载以及任务管理等功能,各Plugin实现由server提供的插件接口,完成插件接入;common提供与平台相关的操作方法、引擎协议以及相关工具类,供其他各模块调用。
AI引擎框架各模块之间的代码依赖关系如下图所示: AI引擎框架各模块之间的代码依赖关系如下图所示:
...@@ -33,9 +33,9 @@ AI引擎框架各模块之间的代码依赖关系如下图所示: ...@@ -33,9 +33,9 @@ AI引擎框架各模块之间的代码依赖关系如下图所示:
![zh-cn_image_0000001151931738](figures/zh-cn_image_0000001151931738.jpg) ![zh-cn_image_0000001151931738](figures/zh-cn_image_0000001151931738.jpg)
#### 建议:插件与北向SDK在AI引擎指定的路径下进行代码开发 #### 建议:插件与OpenHarmony SDK在AI引擎指定的路径下进行代码开发
在AI引擎框架的整体规划中,北向SDK属于client端的一部分,插件由server端调用,属于server端的一部分,因此AI引擎框架为接入的插件与北向SDK规划的路径: 在AI引擎框架的整体规划中,OpenHarmony SDK属于client端的一部分,插件由server端调用,属于server端的一部分,因此AI引擎框架为接入的插件与OpenHarmony SDK规划的路径:
- SDK代码路径://foundation/ai/engine/services/client/algorithm_sdk - SDK代码路径://foundation/ai/engine/services/client/algorithm_sdk
...@@ -52,7 +52,7 @@ AI引擎框架各模块之间的代码依赖关系如下图所示: ...@@ -52,7 +52,7 @@ AI引擎框架各模块之间的代码依赖关系如下图所示:
#### 规则:插件提供的全部对外接口,统一存放在AI业务子系统interfaces/kits目录 #### 规则:插件提供的全部对外接口,统一存放在AI业务子系统interfaces/kits目录
北向SDK对外接口是AI业务子系统提供能力的对外暴露方式,按照OpenHarmony的接口管理要求,需统一存放在各子系统的interfaces/kits目录中。当前AI业务子系统插件对外接口路径为//foundation/ai/engine/interfaces/kits,不同插件可在该路径下添加目录,比如增加cv插件,则在路径//foundation/ai/engine/interfaces/kits/cv下面存放接口文件。 OpenHarmony SDK对外接口是AI业务子系统提供能力的对外暴露方式,按照OpenHarmony的接口管理要求,需统一存放在各子系统的interfaces/kits目录中。当前AI业务子系统插件对外接口路径为//foundation/ai/engine/interfaces/kits,不同插件可在该路径下添加目录,比如增加cv插件,则在路径//foundation/ai/engine/interfaces/kits/cv下面存放接口文件。
#### 规则:插件编译输出路径必须是在/usr/lib #### 规则:插件编译输出路径必须是在/usr/lib
...@@ -78,7 +78,7 @@ server端加载插件是采用dlopen方式,只支持在/usr/lib路径进行, ...@@ -78,7 +78,7 @@ server端加载插件是采用dlopen方式,只支持在/usr/lib路径进行,
#### 规则:SDK需按算法调用顺序,封装client对外提供接口;对于异步插件对应的SDK,需要实现client提供的回调接口IClientCb #### 规则:SDK需按算法调用顺序,封装client对外提供接口;对于异步插件对应的SDK,需要实现client提供的回调接口IClientCb
AI引擎的client端对外提供的接口包括AieClientInit、AieClientPrepare、AieClientSyncProcess、AieClientAsyncProcess、AieClientRelease、AieClientDestroy、AieClientSetOption、AieClientGetOption,SDK需要根据插件的北向接口按照顺序至少封装AieClientInit、AieClientPrepare、AieClientSyncProcess/AieClientAsyncProcess、AieClientRelease、AieClientDestroy五个接口,否则会出现调用问题或者内存泄漏。比如封装过程遗漏了AieClientPrepare接口,则server端无法完成插件加载,故后面的接口都无法调用成功。 AI引擎的client端对外提供的接口包括AieClientInit、AieClientPrepare、AieClientSyncProcess、AieClientAsyncProcess、AieClientRelease、AieClientDestroy、AieClientSetOption、AieClientGetOption,SDK需要根据插件的接口按照顺序至少封装AieClientInit、AieClientPrepare、AieClientSyncProcess/AieClientAsyncProcess、AieClientRelease、AieClientDestroy五个接口,否则会出现调用问题或者内存泄漏。比如封装过程遗漏了AieClientPrepare接口,则server端无法完成插件加载,故后面的接口都无法调用成功。
对于异步插件,SDK需要实现IClientCb接口,用于接收来自client端的算法推理结果,并将该结果返回给三方调用者。 对于异步插件,SDK需要实现IClientCb接口,用于接收来自client端的算法推理结果,并将该结果返回给三方调用者。
......
...@@ -8,18 +8,22 @@ ...@@ -8,18 +8,22 @@
在进行应用的开发前,开发者应了解以下基本概念: 在进行应用的开发前,开发者应了解以下基本概念:
- 视频帧 - 视频帧
视频流指的是将一系列图片数据按照固定时间间隔排列形成的数据流,每一张图片数据成为一帧,这样的一帧称为视频帧。 视频流指的是将一系列图片数据按照固定时间间隔排列形成的数据流,每一张图片数据成为一帧,这样的一帧称为视频帧。
- 帧速率(FPS: Frames Per Second) - 帧速率(FPS,Frames Per Second)
视频播放每秒钟刷新图片的速度,或是视频每秒的帧数,帧速率越高,视频的观感越流畅。 视频播放每秒钟刷新图片的速度,或是视频每秒的帧数,帧速率越高,视频的观感越流畅。
- 分辨率 - 分辨率
每一帧的图片信息都是由像素点组成的,分辨率描述了一张图片中像素点的个数。例如1920\*1080(1080P),是指图片宽1920像素,高1080像素。 每一帧的图片信息都是由像素点组成的,分辨率描述了一张图片中像素点的个数。例如1920\*1080(1080P),是指图片宽1920像素,高1080像素。
## 运作机制 ## 运作机制
- 多媒体服务进程 - 多媒体服务进程
多媒体服务作为系统服务,在系统启动时由Init进程拉起,并初始化和分配媒体硬件资源(内存/显示硬件/图像传感器/编解码器等)。初始化过程解析配置文件,确定了多媒体各个服务的能力和资源上限,通常由OEM厂商通过配置文件进行配置。相机服务在多媒体进程初始化时有以下配置项: 多媒体服务作为系统服务,在系统启动时由Init进程拉起,并初始化和分配媒体硬件资源(内存/显示硬件/图像传感器/编解码器等)。初始化过程解析配置文件,确定了多媒体各个服务的能力和资源上限,通常由OEM厂商通过配置文件进行配置。相机服务在多媒体进程初始化时有以下配置项:
- 内存池:所有媒体服务依赖于内存池中的内存轮转运行 - 内存池:所有媒体服务依赖于内存池中的内存轮转运行
...@@ -28,8 +32,10 @@ ...@@ -28,8 +32,10 @@
- 图像编码器:编码格式、码率、分辨率等 - 图像编码器:编码格式、码率、分辨率等
- 关键类的解释 - 关键类的解释
应用通过持有下面4个类,配置和使用Camera的功能,包括了Camera类和它的三个异步回调类,三类回调分别对应了不同类型的异步处理场景,详见下表。
**表1** 关键类的解释 应用通过持有下面4个类,配置和使用Camera的功能,包括了Camera类和它的三个异步回调类,三类回调分别对应了不同类型的异步处理场景,详见下表。
**表1** 关键类的解释
| 对象 | 用途 | 举例 | | 对象 | 用途 | 举例 |
| -------- | -------- | -------- | | -------- | -------- | -------- |
...@@ -39,6 +45,7 @@ ...@@ -39,6 +45,7 @@
| FrameStateCallback | 处理帧状态的变化 | 拍照开始和结束/帧率发生变化 | | FrameStateCallback | 处理帧状态的变化 | 拍照开始和结束/帧率发生变化 |
- 流的传递 - 流的传递
Surface是多媒体传递音视频的基本数据结构,Camera一般作为Surface中数据的生产者,在不同的场景下有特定的消费者。 Surface是多媒体传递音视频的基本数据结构,Camera一般作为Surface中数据的生产者,在不同的场景下有特定的消费者。
相机的预览和录像输出均为视频流,拍照输出为图像帧,二者均通过Surface类进行传递。Surface类可以屏蔽进程内/跨进程的场景,进行多媒体信息流的传递。 相机的预览和录像输出均为视频流,拍照输出为图像帧,二者均通过Surface类进行传递。Surface类可以屏蔽进程内/跨进程的场景,进行多媒体信息流的传递。
...@@ -50,14 +57,19 @@ ...@@ -50,14 +57,19 @@
图形图像模块也通过Surface从Camera获取流资源,具体步骤详见[图形图像开发指导](../subsystems/subsys-graphics-overview.md) 图形图像模块也通过Surface从Camera获取流资源,具体步骤详见[图形图像开发指导](../subsystems/subsys-graphics-overview.md)
- 相机运行流程 - 相机运行流程
1. Camera创建流程 1. Camera创建流程
本进程通过CameraManager创建Camera实例,并从服务端绑定camera设备,创建成功后异步通知developer。类之间的时序图如下:
本进程通过CameraManager创建Camera实例,并从服务端绑定camera设备,创建成功后异步通知developer。类之间的时序图如下:
**图1** Camera创建时序图 **图1** Camera创建时序图
![zh-cn_image_0000001200114819](figures/zh-cn_image_0000001200114819.png)
![zh-cn_image_0000001200114819](figures/zh-cn_image_0000001200114819.png)
1. Camera录像/预览流程 2. Camera录像/预览流程
开发者首先通过CameraKit创建Camera,然后FrameConfig类对录像或者预览帧属性进行配置。录像/预览时序如下:
开发者首先通过CameraKit创建Camera,然后FrameConfig类对录像或者预览帧属性进行配置。录像/预览时序如下:
**图2** Camera录像/预览时序图 **图2** Camera录像/预览时序图
![zh-cn_image_0000001200115193](figures/zh-cn_image_0000001200115193.png)
![zh-cn_image_0000001200115193](figures/zh-cn_image_0000001200115193.png)
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
使用Camera产生图片帧(拍照)。 使用Camera产生图片帧(拍照)。
### 接口说明 ## 接口说明
**表1** API列表 **表1** API列表
......
...@@ -3,12 +3,12 @@ ...@@ -3,12 +3,12 @@
## 使用场景 ## 使用场景
使用camera产生视频流并播放。 使用Camera产生视频流并播放。
### 接口说明 ## 接口说明
参考“拍照开发指导”的“接口说明”。 参考[拍照开发指导](subsys-multimedia-camera-photo-guide.md)的“接口说明”。
## 约束与限制 ## 约束与限制
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
## 开发步骤 ## 开发步骤
1. 参考“拍照开发指导”中步骤1、步骤2、步骤3、步骤4。 1. 参考[拍照开发指导](subsys-multimedia-camera-photo-guide.md)中步骤1、步骤2、步骤3、步骤4。
2. 设置预览显示的区域。 2. 设置预览显示的区域。
...@@ -27,8 +27,8 @@ ...@@ -27,8 +27,8 @@
/* 设置显示区域 */ /* 设置显示区域 */
surface->SetUserData("region_position_x", "480"); // 矩形左上角横坐标 surface->SetUserData("region_position_x", "480"); // 矩形左上角横坐标
surface->SetUserData("region_position_y", "270"); // 矩形左上角纵坐标 surface->SetUserData("region_position_y", "270"); // 矩形左上角纵坐标
surface->SetUserData("region_width", "960"); // 宽 surface->SetUserData("region_width", "960"); // 宽
surface->SetUserData("region_height", "540"); // 高 surface->SetUserData("region_height", "540"); // 高
fc->AddSurface(*surface); fc->AddSurface(*surface);
``` ```
...@@ -37,5 +37,5 @@ ...@@ -37,5 +37,5 @@
``` ```
stateCallback->camera_->TriggerLoopingCapture(*fc); // 开始预览 stateCallback->camera_->TriggerLoopingCapture(*fc); // 开始预览
stateCallback->camera_->StopLoopingCapture(); // 停止预览 stateCallback->camera_->StopLoopingCapture(); // 停止预览
``` ```
...@@ -3,12 +3,12 @@ ...@@ -3,12 +3,12 @@
## 使用场景 ## 使用场景
使用camera采集视频码流。 使用Camera采集视频码流。
### 接口说明 ## 接口说明
参考“拍照开发指导”的“接口说明”。 参考[拍照开发指导](subsys-multimedia-camera-photo-guide.md)的“接口说明”。
## 约束与限制 ## 约束与限制
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
## 开发步骤 ## 开发步骤
1. 参考“拍照开发指导”中步骤1、步骤2、步骤3、步骤4。 1. 参考[拍照开发指导](subsys-multimedia-camera-photo-guide.md)中步骤1、步骤2、步骤3、步骤4。
2. 获取录像FrameConfig。 2. 获取录像FrameConfig。
...@@ -37,5 +37,5 @@ ...@@ -37,5 +37,5 @@
``` ```
stateCallback->camera_->TriggerLoopingCapture(*fc); // 开始录像 stateCallback->camera_->TriggerLoopingCapture(*fc); // 开始录像
stateCallback->camera_->StopLoopingCapture(); // 结束录像 stateCallback->camera_->StopLoopingCapture(); // 结束录像
``` ```
...@@ -13,16 +13,21 @@ OpenHarmony音视频包括音视频播放和录制。 ...@@ -13,16 +13,21 @@ OpenHarmony音视频包括音视频播放和录制。
在进行应用的开发OpenHarmony前,开发者应了解以下基本概念: 在进行应用的开发OpenHarmony前,开发者应了解以下基本概念:
- **流媒体技术** - 流媒体技术
流媒体技术是把连续的影像和声音信息进行编码处理后放在网络服务器上,让浏览者一边下载、一边观看与收听,而不需要等整个多媒体文件下载完成就可以即时观看、收听的技术。 流媒体技术是把连续的影像和声音信息进行编码处理后放在网络服务器上,让浏览者一边下载、一边观看与收听,而不需要等整个多媒体文件下载完成就可以即时观看、收听的技术。
- **视频帧率** - 视频帧率
帧率是用于测量显示帧数的度量,帧数就是在每秒钟时间里传输的图片数量。每秒钟帧数 (FPS) 越多,所显示的画面就会越流畅。 帧率是用于测量显示帧数的度量,帧数就是在每秒钟时间里传输的图片数量。每秒钟帧数 (FPS) 越多,所显示的画面就会越流畅。
- **码率** - 码率
码率就是数据传输时单位时间传送的数据位数,常用单位是kbps即千位每秒。 码率就是数据传输时单位时间传送的数据位数,常用单位是kbps即千位每秒。
- **采样率** 采样率为每秒从连续信号中提取并组成离散信号的采样个数,单位用赫兹(Hz)来表示。 - 采样率
采样率为每秒从连续信号中提取并组成离散信号的采样个数,单位用赫兹(Hz)来表示。
## 编解码规格 ## 编解码规格
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册