C++ SDK开发实战宝典
文章平均质量分 77
此专栏主要讲解iOS,Android,HarmonyOS,OpenHarmony等移动端平台的多媒体SDK,算法SDK的开发实战流程,设计及集成发布,以项目实战经验为主,深入浅出,注重基本技巧和跨平台软件开发要点和细节,帮助大家移动端开发入门和进阶,助力大家找到十分满意的工作。
大王算法
主要做机器人,操作系统,算法及AI方面的研发工作,有感兴趣的朋友可以私信加我好友,一起探讨交流!
展开
-
OpenHarmony音频采集开发
RUNNING状态: 正在进行音频数据播放,可以在prepared状态通过调用start()方法进入此状态,也可以在stopped状态通过调用start()方法进入此状态。RELEASED状态: 在prepared和stop状态,用户均可通过release()方法释放掉所有占用的硬件和软件资源,并且不会再进入到其他的任何一种状态了。(9).如果应用需要在采集器状态更新时进行一些操作,可以订阅该事件,当采集器状态更新时,会受到一个包含有事件类型的回调。采集器采集的帧数到达设定值时,会触发回调并返回设定的值。原创 2023-02-28 22:37:40 · 888 阅读 · 3 评论 -
OpenHarmony OpenSl ES音频播放开发
当前仅实现了部分OpenSL ES接口,因此调用未实现接口后会返回SL_RESULT_FEATURE_UNSUPPORTED。(5).获取接口 SL_IID_OH_BUFFERQUEUE 的 bufferQueueItf 实例。(7).获取接口 SL_PLAYSTATE_PLAYING 的 playItf 实例,开始播放。(3).获取接口 SL_IID_ENGINE 的 engineEngine 实例。(2).使用 slCreateEngine 接口和获取 engine 实例。(8).结束音频播放。原创 2023-02-28 22:38:56 · 591 阅读 · 1 评论 -
OpenHarmony系统的微内核
但是5G时代,一个万物互联(Internet of Things, IoT)的时代,将有更多的小型智能设备接入互联网,低功耗、低内存、安全性成为了新的要求,在这些设备上跑宏内核的系统绝对不是好的选择,由此,微内核的热度又起来了。也就是说,宏内核提供了大量的冗余功能,兼容了太多的硬件,代码量自然就大。我们常说的Linux/UNIX就是基于宏内核的,内核提供了相当多的功能,包括驱动,调度器,地址空间管理,进程间通信,文件系统,虚拟文件系统,系统调用等,以Linux为例,其宏内核的代码量高达2700万行。原创 2023-04-30 21:56:53 · 1248 阅读 · 0 评论 -
OpenHarmony媒体子系统audio_lite组件
图1 媒体子系统系统架构图。audio_lite组件提供音频能力的支持。音频组件单仓的编译构建,在根目录下进行单仓的构建和编译。需要C++11版本或以上。2、音频组件代码目录。3、音频组件使用说明。原创 2023-03-31 22:13:46 · 199 阅读 · 0 评论 -
OpenHarmony多媒体播放器框架详解
首先根据RunCase可以大致了解一下播放音视频的主要流程,创建播放器,设置播放源,设置回调方法(包含播放过程中的多种状态的回调),设置播放显示的Surface,这些准备工作做好之后,需要调用播放器的PrepareASync方法,这个方法完成后,播放状态会变成Prepared状态,这时就可以调用播放器的play接口,进行音视频的播放了。RegisterTable()方法中,将字符串和对应的方法映射到Map中,这样后续的DoNext会根据输入的命令,来决定播放器具体的操作。这个方法中发起了一个播放的任务。原创 2023-04-30 21:55:56 · 934 阅读 · 0 评论 -
OpenHarmony媒体子系统相机组件
预览的宽和高可以配置为所支持的 640x480 或 832x480 分辨率,如果想保存到文件,可以按照拍照流程提到步骤,创建 Surface,注册监听器以监听缓冲区更新。如果用户想要切换其他 照相机,现存的相机输入和输出需要先移除并加入新的相机输入和输出(示例中使用的是photo output)15)、创建拍照输出,成功创建后将拍照输出添加到采集会话。相机组件支持相机业务的开发,开发者可以通过已开放的接口实现相机硬件的访问、操作和新功能开发,最常见的操作如:预览、拍照和录像等。原创 2023-03-31 23:00:48 · 501 阅读 · 1 评论 -
OpenHarmony音频渲染开发
在AudioRenderer模块,当开发者需要监听焦点变化事件时,只需要调用on('audioInterrupt')函数,当应用内部的AudioRenderer对象在start\stop\pause等动作发生时,会主动请求焦点,从而发生焦点转移,相关的AudioRenderer对象即可获取到对应的回调信息。2).RUNNING状态: 正在进行音频数据播放,可以在prepared状态通过调用start()方法进入此状态,也可以在pause状态和stopped状态通过调用start()方法进入此状态。原创 2023-02-28 22:36:31 · 569 阅读 · 0 评论 -
OpenHarmony音频流管理开发
开发者可通过调用on('audioRendererChange')、on('audioCapturerChange')监听音频播放应用和音频录制应用,在应用状态变化、设备变化、音频属性变化时获得通知。与此同时,开发者可以通过调用(可选)使用getCurrentAudioRendererInfoArray()获取当前音频播放应用的音频流唯一ID、音频播放客户端的UID、音频状态等信息,同理可调用getCurrentAudioCapturerInfoArray()获取音频录制应用的信息。音频流管理调用关系图。原创 2023-02-28 22:38:11 · 376 阅读 · 0 评论 -
OpenHarmony相机系统详解
相机框架中主要包含会话管理、设备输入和数据输出,设备的输入和数据的输出配置都是在采集会话中完成,会话管理模块管理相机设备输入和数据输出。底层硬件提供了相机设备功能,比如相机的设备管理,包括相机设备枚举、相机设备能力查询、流的创建管理以及图像的捕获。相机组件支持相机业务的开发,开发者可以通过已开放的接口实现相机硬件的访问、操作和新功能开发,最常见的操作如:预览、拍照和录像等。(3).数据输出:相机的输出有拍照输出、预览输出和录像输出,分别对应三个不同的类,所以上层需要根据不同的场景创建出不同的数据输出。原创 2023-04-30 21:57:04 · 608 阅读 · 0 评论 -
OpenHarmony音量管理开发
说明: AudioVolumeManager包含音量变化监听处理和音频音量组管理相关(AudioVolumeGroupManager),开发者调用AudioVolumeGroupManager的相关方法,需要先调用getVolumeGroupManager方法创建AudioVolumeGroupManager实例,从而调用对应的接口实现相应的功能,主要接口有:获取指定流的音量、设置麦克风静音、监听麦克风状态变化等。如果开发者需要获取、设置麦克风状态,或者监听麦克风状态变化等信息,可参考并调用以下接口。原创 2023-02-28 22:36:53 · 694 阅读 · 0 评论 -
OpenHarmony媒体子系统媒体引擎组件
HiStreamer作为媒体引擎,向上对接player_framework(standard设备上)或者media_lite(mini/small设备上),再对外提供应用API。这些节点的具体功能,主要在插件中实现。可以插件的形式扩展支持新的数据源、封装格式、编解码格式、输出方式。HiStreamer是一个轻量级的媒体引擎组件,提供播放、录制等场景的媒体数据流水线处理。需要C++11版本或以上。4、媒体引擎组件代码目录。原创 2023-03-31 22:11:30 · 399 阅读 · 0 评论 -
OpenHarmony hdc_std无反应的解决办法
在我们使用hdc_std访问OpenHarmony板子时,可能会遇到hdc_std命令无响应的问题。原创 2023-01-27 22:37:14 · 436 阅读 · 0 评论 -
OpenHarmony媒体子系统media_utils组件
提供媒体错误码等公用信息的定义,以及录制、播放音频和视频所需的数据类型。图1 媒体子系统系统架构图。单仓的编译构建,在根目录下进行单仓的构建和编译。2、media_utils组件代码目录。需要C++11版本或以上。3、media_utils组件使用说明。原创 2023-03-31 22:11:28 · 194 阅读 · 0 评论 -
OpenHarmony媒体子系统音频组件
常用的音频采样频率有:8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz、96kHz、192kHz等。音频数据是流式的,本身没有明确的一帧帧的概念,在实际的应用中,为了音频算法处理/传输的方便,一般约定俗成取2.5ms~60ms为单位的数据量为一帧音频。PCM(Pulse Code Modulation),即脉冲编码调制,是一种将模拟信号数字化的方法,是将时间连续、取值连续的模拟信号转换成时间离散、抽样值离散的数字信号的过程。以下步骤描述了如何使用。原创 2023-03-31 23:34:49 · 446 阅读 · 0 评论 -
OpenHarmony媒体子系统media_lite组件
media_lite组件提供播放、录制、解析、解码等接口能力,并提供媒体播放录制引擎服务化能力。图1 媒体子系统系统架构图。media_lite组件单仓的编译构建,在根目录下进行单仓的构建和编译。需要C++11版本或以上。2、media_lite组件代码目录。3、media_lite组件使用说明。原创 2023-03-31 22:11:25 · 201 阅读 · 0 评论 -
OpenHarmony媒体子系统Camera_Lite组件
Camera_Lite组件提供相机能力的支持。相机组件单仓的编译构建,在根目录下进行单仓的构建和编译。├── frameworks # 框架代码。└── kits # 对外接口。└── interfaces # 接口。C++11版本或以上。2、相机组件代码目录。3、相机组件使用说明。原创 2023-03-31 22:11:20 · 287 阅读 · 0 评论 -
OpenHarmony媒体组件
媒体组件为开发者提供一套简单易于理解的接口,能够使得开发者方便接入系统并使用系统的媒体资源。图1 媒体组件架构图。3、媒体组件代码仓结构。原创 2023-03-31 23:36:04 · 335 阅读 · 0 评论 -
OpenHarmony音频焦点模式开发
音频焦点模式指的是应用内,允许对多个声音的播放进行控制。音频应用可以在AudioRenderer下设置独立焦点模式、共享焦点模式。当设置在共享的模式下,多个音频共用一个会话ID;独立焦点模式下,每一个音频拥有单独会话ID。对于每个API均提供了callback函数和Promise函数,以下示例均采用Promise函数。在AudioRenderer初始化完毕后,可以进行焦点模式的设置。该实例可用于音频渲染、控制和获取采集状态,以及注册通知回调。2、OpenHarmony音频焦点模式开发指导。原创 2023-02-28 22:38:36 · 395 阅读 · 0 评论 -
OpenHarmony OpenSl ES音频录制
(4).配置录音器信息(配置输入源audiosource、输出源audiosink),创建录音对象pcmCapturerObject。(6).获取接口 SL_IID_OH_BUFFERQUEUE 的 bufferQueueItf 实例。(2).使用 slCreateEngine 接口创建引擎对象和实例化引擎对象 engine。(3).获取接口 SL_IID_ENGINE 的引擎接口 engineEngine 实例。(5).获取录音接口SL_IID_RECORD 的 recordItf 接口实例。原创 2023-02-28 22:38:45 · 496 阅读 · 0 评论 -
OpenHarmony 3D显示框架详解
由于 Mesa 3D 的 API 是和 OpenGL 相同,具体的 OpenGL 版本浏览 Mesa 3D 官方网站,我们可以这么认为它就是 OpenGL 的软件模拟,GPU 光栅处理器的一个实现。但是支持3D的显示扩展,我们可以使用OpenGL进行3D显示,Mesa库编译到OpenHarmony后,我们就可以使用OpenGL的2D,3D功能了,利用Openharmony里边Mesa3D,可以用OpenGL ES 接口在OpenHarmony里写3d的程序或者游戏。原创 2023-04-30 21:56:42 · 3300 阅读 · 0 评论 -
Android JNI 使用总结
Android JNI 使用的数据结构JNINativeMethod详解:Andoird 中使用了一种不同传统Java JNI的方式来定义其native的函数。其中很重要的区别是Andorid使用了一种Java 和 C 函数的映射表数组,并在其中描述了函数的参数和返回值。这个数组的类型是JNINativeMethod,定义如下:typedef struct {const char* name;const char* signature;void* fnPtr;} JNINativeM原创 2021-07-31 22:08:10 · 145 阅读 · 0 评论 -
Android系统架构
一、Android系统Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Linux平台的开源手机操作系统的名称,该平台由操作系统、中间件、用户界面和应用软件组成。二、Android已发布版本Android在正式发行之前,最开始拥有两个内部测试版本,并且以著名的机器人名称来对其进行命名,它们分别是:阿童木(AndroidBeta),发条机器人(Android 1.0)。后来由于涉及到版权问题,谷歌将其命名规则变更为用甜点作为它们系统版本的代号的命名方法。甜点原创 2021-07-31 22:03:56 · 735 阅读 · 1 评论 -
Android Studio 调试快捷键及调试技巧
1、Android Studio 调试快捷键Shift+F9 快捷键,启动程序的调试模式。 快捷键 F8 单步执行程序。 快捷键 F7 单步执行程序,遇到方法时进入。 快捷键 Alt+F9 运行到光标处。 跳到下一个断点,step out(Shift+F8),跳出进入的方法。 查找引用alt + F7 显示调用 alt + f7 显示调用的提示框 command + alt + f7 (同上的作用) 跳转至声明定义的地方 command + b / command + click 跳.原创 2021-08-29 21:26:49 · 5927 阅读 · 0 评论 -
Xcode 编译系统的编译过程及原理
任何 iOS 源代码在设备上运行之前都需要编译器的一系列处理,这个过程通常由 Xcode Build System 完成。在这篇文章中,我将介绍 Xcode Build System 的每一个部分。为何要学编译知识说说 OCLint 、SwiftLint 实现原理是怎样的?如何编写 Clang 插件?Obfuscator-LLVM 在 iOS 中如何实现混淆加固?iOS 中 Bitcode 到底是如何优化 IPA 包的?如果以上问题你都可以说个大概,请忽略本文,如果你对以上...转载 2021-06-27 22:30:01 · 2284 阅读 · 0 评论 -
iOS实时美颜滤镜实现
1、背景 随着各种直播、视频编辑APP的发展,美颜滤镜的需求也越来越多,应用场景也是越来越丰富。下面主要介绍下美颜滤镜的实现原理和思路,附带个人源码给大家参考。 目前在iOS里面美颜滤镜的实现基本上都是基于GPUImage处理框架。2、GPUImageGPUImage是一个开源的基于GPU的图片或视频的处理框架,其本身内置了多达120多种常见的滤镜效果。有了它,添加实时的滤镜只需要简单地添加几行代码。下面的例子是以摄像头的数据为源,对其实时地...原创 2021-06-27 22:35:20 · 1373 阅读 · 2 评论 -
iOS常见滤镜实现总结
在IOS中可以使用系统自带的方法来达到路径效果:需要用到的类为:CIContext,CIImage,CIFilterCIFilter实现滤镜效果的使用步骤:1.创建图像上下文CIContext2.创建过滤原图片CIImage 3.创建滤镜CIFilter4.调用CIFilter的setValue: forKey:方法为滤镜指定源图片5.设置滤镜参数【可选】6.取得输出图片显示或保存代码示例://获取毛玻璃图片 self.orignalImage ..转载 2021-06-27 22:34:28 · 2020 阅读 · 0 评论 -
Xcode 中的编译过程以及编译器
Xcode的编译过程:基本步骤大概可以分为4个:(1).预处理(Pre-process):把宏替换,删除注释,展开头文件,产生.i文件(2).编译(Compliling):把之前的.i文件转换成汇编语言,产生.s文件(3).汇编(Asembly):把汇编语言文件转换为机器码文件,产生.o文件(4).链接(Link):对.o文件中的对于其他的库的引用的地方进行引用,生成最后的可执行文件(同时也包括多个.o文件进行 link)通过解析 xcode 编译 log,可以发现...原创 2021-06-27 22:27:19 · 2050 阅读 · 0 评论 -
CocoaPods的安装使用
当你开发iOS应用时,会经常使用到很多第三方开源类库,比如JSONKit,AFNetWorking等等。可能某个类库又用到其他类库,所以要使用它,必须得另外下载其他类库,而其他类库又用到其他类库,“子子孙孙无穷尽也”,这也许是比较特殊的情况。总之小编的意思就是,手动一个个去下载所需类库十分麻烦,这些体力活虽然简单,但毫无技术含量并且浪费时间。另外一种常见情况是,你项目中用到的类库有更新,你必须得重新下载新版本,重新加入到项目中,十分麻烦。如果能有什么工具能解决这些恼人的问题,那将“善莫大焉”。所以...原创 2021-05-30 17:42:05 · 744 阅读 · 0 评论 -
iOS 媒体库完整流程
在 iOS 中,媒体库(Mediabrary)是指设备上的照片、视频、音乐等多媒体内容。如果您指的是如何编程访问和操作 iOS 设备上的媒体库,那么这涉及到使用 Apple 的开发工具和 API,具体如下。iOS设备不仅仅是一部手机,它更像是一个随身携带的媒体中心。iPhone里可以存储着数以千计的照片、视频、音乐和播客。在这个数字化时代,能够有效地管理这些内容对我们的日常生活和工作至关重要。我使用的第一个功能是“照片”App。原创 2021-04-28 22:59:54 · 1073 阅读 · 0 评论 -
iOS视频播放的横屏与竖屏的处理
一般来说,视频播放的横竖屏处理有两种:1、视频播放的选装有两种方式进行处理,一种是旋转的的时候,视频也跟着旋转;2、还有一种可能就是屏幕旋转的时候,通过一个按钮只是选装视频一个横屏,一个为竖屏就好了;对于播放界面不随着屏幕旋转的方式,通过改变keywindow的大小和方向来修改横屏,通过一个按钮的点击事件; 若是通过第1种方案,也就是随着屏幕的旋转播放页面发生了旋转的时候,需要UITraitEnvironment 接口的方法,好像这个方法监听,这个接口的方法调用情况:(1)初始...原创 2021-04-28 22:55:09 · 3635 阅读 · 0 评论 -
使用IOS原生的UIVideoEditController进行视频编辑
UIVideoEditorController类包含了由系统提供的界面,使用户可以交互式的剪切视频。UIVideoEditorController对象处理用户的交互并且提供把编辑后的视频的文件系统路径提供给UIVideoEditorControllerDelegate对象.UIVideoEditorController只支持能够支持视频编辑的设备.我们设置好它的delegate及videoPath属性,并将其展示出来。(经过videoQuality属性,也可以通过这个类将视频重新编码成质量较低的格式)。原创 2021-04-28 22:53:06 · 724 阅读 · 0 评论 -
iOS Touches事件处理知识总结
通过深入理解和正确处理iOS中的触摸事件,开发者可以创建出更加流畅和互动性强的应用。掌握这些基础和高级技巧,将有助于提升用户的体验和满意度。原创 2021-03-30 23:17:32 · 134 阅读 · 1 评论 -
iOS CVPixelBufferRef深入解析及视频渲染方法
CVPixelBufferRef:是一种像素图片类型,由于CV开头,所以它是属于 CoreVideo 模块的。CVPixelBufferRef是Core Video框架中定义的一个类型,代表视频帧的像素数据。它不仅包含了原始图像数据,还包含了图像的格式、尺寸以及每个像素的布局信息。通过操作`CVPixelBufferRef`,开发者可以对视频帧进行读取、修改和渲染等操作。原创 2021-03-30 23:13:21 · 4475 阅读 · 0 评论 -
iOS 中各种锁的使用总结
在iOS多线程中,使用锁是保证线程访问安全的重要手段,而且iOS中给我们提供了很多非常好使用的锁,看之前,先说说关于锁的一些名词吧。原子:同一时间只允许一个线程访问临界区:指的是一块对公共资源进行访问的代码,并非一种机制或是算法。自旋锁:是用于多线程同步的一种锁,线程反复检查锁变量是否可用。由于线程在这一过程中保持执行,因此是一种忙等待。一旦获取了自旋锁,线程会一直保持该锁,直至显式释放自旋锁。 自旋锁避免了进程上下文的调度开销,因此对于线程只会阻塞很短时间的场合是有效的。互斥锁原创 2021-02-28 21:32:35 · 1751 阅读 · 1 评论 -
iOS pthread、NSThread使用总结
pthread的使用:1.pthread pthread 是一套通用的多线程的 API,可以在Unix / Linux / Windows 等系统跨平台使用,使用 C 语言编写,需要程序员自己管理线程的生命周期,使用难度较大,在C++开发中比较常用,但是在 iOS 开发中几乎不使用 pthread。实现 POSIX 线程标准的库常被称作 Pthreads,一般用于 Unix-like POSIX 系统,如 Linux、Solaris。但是 Microsoft Windows 上的实现也...原创 2021-01-31 21:29:06 · 468 阅读 · 1 评论 -
iOS应用程序生命周期
1.应用程序生命周期(AppDelegate)(1.点击应用程序图标(2.程序入口:进入Main函数(3.通过UIApplicationMain函数(4.初始化UIApplication对象并且设置代理对象AppDelegate(5.程序完成加载:[AppDelegate application:didFinishLaunchingWithOptions:](6.创建Window窗口:UIWindow(7.程序被激活:[AppDelegate applicationDidBeco原创 2020-12-31 21:33:09 · 595 阅读 · 0 评论 -
iOS 分类、扩展、代理、通知、KVC、KVO、属性关键字
一、分类(Category)1、分类的作用?声明私有方法,分解体积大的类文件2、分类的特点?可以为系统类添加分类。在运行时时期,将 Category 中的实例方法列表、协议列表、属性列表添加到主类中后(所有Category中的方法在方法列表中的位置是在主类的同名方法之前的),然后会递归调用所有类的 load 方法,这一切都是在main函数之前执行的。3、分类可以添加哪些内容?实例方法,类方法,属性(添加getter和setter方法,并没有实例变量,添加实例变量需要用关联对象)4转载 2020-12-31 21:32:06 · 291 阅读 · 1 评论 -
iOS信号量详解
一、信号量的简单介绍:1.信号量:信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用。在进入一个关键代码段之前,线程必须获取一个信号量;一旦该关键代码段完成了,那么该线程必须释放信号量。其它想进入该关键代码段的线程必须等待直到第一个线程释放信号量。为了完成这个过程,需要创建一个信号量VI,然后将Acquire Semaphore VI以及Release Semaphore VI分别放置在每个关键代码段的首末端。确认这些信号量原创 2020-12-31 21:31:02 · 5828 阅读 · 1 评论 -
OC协议在解耦中的应用
OC协议,即观察者和控制器协议,是一种常用于软件设计中的模式,旨在实现对象之间的松耦合。在这种模式下,一个对象(观察者)订阅另一个对象(控制器)的状态变化,并在状态变化时获得通知。这种模式允许多个观察者独立地观察同一个控制器,而不需要控制器了解其观察者的具体信息,从而实现了解耦。OC协议通过引入观察者和控制器的概念,实现了软件组件之间的高度解耦,使得系统更加灵活、可维护。在面对频繁变化的需求和技术环境时,采用OC协议可以大大提高软件项目的适应性和长期可持续性。原创 2020-12-31 21:29:23 · 247 阅读 · 1 评论 -
iOS GCD线程之间的通信
通过线程的依赖关系实现线程同步:1、组队列(dispatch_group_t) 举一个例子:用户下载一个视频,视频很大,需要分成很多份进行下载,使用GCD应该如何实现?使用什么队列? 使用Dispatch Group追加block到Global Group Queue,这些block如果全部执行完毕,就会执行通过dispatch_group_notify添加到主队列中的block,进行视频的合并处理。dispatch_queue_t queue = dispa...原创 2020-09-30 22:41:26 · 2105 阅读 · 1 评论