OpenHarmony 分布式相机(下)-分布式相机
OpenHarmony 分布式相机(下)
作者:徐金生 2023-02-21 16:41:41系统 OpenHarmony 我们正常会在MainAbility.ts的onCreate()函数加载的时候执行申请授权,在index.ets页面中,当 XComponent 组件 onLoad() 回调后执行初始化相机操作。想了解更多关于开源的内容,请访问:
51CTO开源基础软件社区
https://ost.51cto.com
前面两篇,已经介绍了分布式相机应用开发的整个流程,有兴趣的可以回顾下:
OpenHarmony 分布式相机(上)OpenHarmony 分布式相机(中)这篇我们主要讲讲分布式相机开发过程中遇到的一些问题和思考,由于本地人目前主要是北向入手,所以只从应用开发的角度总结目前遇到的问题,如有一些低级错误,还希望各位老师不吝赐教。
分布式相机问题一览
对于开发过程中所遇到的一些坑,前面两篇多少有简单的提到一些,这里做一次规整,也算是一次回顾。
1、首次授权成功无法显示相机预览
解析:我们正常会在MainAbility.ts的onCreate()函数加载的时候执行申请授权,在index.ets页面中,当 XComponent 组件 onLoad() 回调后执行初始化相机操作,代码如下:
MainAbility.ts
const TAG: string = '[DistributedCamera]'let permissionList: Arrayindex.ets
// ...// 截取部分主要代码Column() {XComponent({id: 'componentId',type: 'surface',controller: this.XComponentController}).onLoad(async () => {console.info(`${TAG} XComponent onLoad is called`)this.XComponentController.setXComponentSurfaceSize({surfaceWidth: Resolution.DEFAULT_WIDTH,surfaceHeight: Resolution.DEFAULT_HEIGHT})this.surfaceId = this.XComponentController.getXComponentSurfaceId()console.info(`${TAG} surfaceId: ${this.surfaceId}`)await this.initCamera()}).height('100%').width('100%')}.width('100%').height('75%').margin({bottom: 20})// ...应用启动后,调用了requestPermissionsFromUser()请求权限后,但未手动授权时,查看相关日志:
日志告诉我们,page的生命周期已启动到onShow,并且页面布局也完成了加载,XComponent 组件回调 onLoad() ,但是由于还未授权,导致无法初始化相机,此时即便授权成功,也不会再进行初始化,导致相机无法启动,无预览视图。
知道原因后,我们可以有多种方式解决,重点就是在授权完成后,需要再次触发初始化相机,让相机启动才可以正常预览。
我的处理方式:
1、在index.ets页面中处理授权2、定义是否已授权的标识,用于判断是否可以初始化相机3、定义是否已经初始化相机标识,防止对此初始化4、在page页面初始化函数aboutToAppear()中请求权限,并在权限申请结果中添加初始化相机操作5、XComponent 组件回调 onLoad() 初始化相机操作不变
index.ets
private isInitCamera: boolean = false // 是否已初始化相机private isPermissions: boolean = false // 是否完成授权async aboutToAppear() {console.info(`${TAG} aboutToAppear`)globalThis.cameraAbilityContext.requestPermissionsFromUser(permissionList).then(async (data) => {console.info(`${TAG} data permissions: ${JSON.stringify(data.permissions)}`)console.info(`${TAG} data authResult: ${JSON.stringify(data.authResults)}`)// 判断授权是否完成let resultCount: number = 0for (let result of data.authResults) {if (result === 0) {resultCount += 1}}if (resultCount === permissionList.length) {this.isPermissions = true}await this.initCamera()// 获取缩略图this.mCameraService.getThumbnail(this.functionBackImpl)})}2、相机应用未关闭,系统息屏后重新点亮,重新返回相机应用,无预览输出流返回
解析:从现象看,预览画面卡在息屏前的状态,需要退出应用后,重启应用才能正常预览。从日志上看没有查看到具体的原因,只是camera_host的数据量日志消失。猜想:相机在系统息屏后强制关闭,需要重新加载相机才能正常预览,实现方式如下:1、在page的onPageShow()回调函数中重新初始化相机2、在page的onPageHide()函数中释放相机资源,减少系统资源不必要的消耗。
index.ets
async onPageShow() {console.info(`${TAG} onPageShow`)await this.initCamera()}onPageHide() {console.info(`${TAG} onPageHide`)this.isSwitchDeviceing = falsethis.isInitCamera = falsethis.mCameraService.releaseCamera()}结论:实践验证此方法有效解决息屏后点亮返回相机无法预览的问题。
3、加载远程相机,在会话管理中添加拍照输出流,无法拍照,预览黑屏
解析:两台设备pin码认证通过,连接成功,在主控端选择一台被控端设备时,加载相机,流程与加载本地相机相同,流程如下:
createCameraInput()createPreviewOutput()createPhotoOutput()createSession()* createSession.beginConfig()* createSession.addInput(CameraInput)* createSession.addOutput(PreviewOutput)* createSession.addOutput(PhotoOutput)* createSession.commitConfig()* createSession.start()经过排查,发现日志中返回异常not found in supported streams,详情可以查看关联issues
原因:在创建PhotoOutput时需要传递支持的拍照配置信息Profile,这里的Profile可以通过CmeraManager.getSupportedOutputCapability()返回的相机输出能力CameraOutputCapability对象获取,但远程相机设备拍照输出能力列表返回空,但通过查看本地相机拍照输出能力可知DAYU200设备支持的Profile信息:
photoProfile {"format":2000,"size":{"width":1280,"height":960}}通过此将photoProfile作为远程相机设备构建拍照输出流的入参场景拍照输出流,并把此添加到拍照会话管理中,但是界面出现不支持此相机配置,最终关闭了相机,导致黑屏。
解决方案:根据此问题,目前只能根据场景判断是否需要添加拍照输出流到会话管理,对于本地相机则可以添加拍照输出流,执行拍照业务,远程相机则不添加拍照输出流,这也就不能执行拍照业务,希望社区有解决方案。
4、切换不同设备上的相机,相机预览输出流出现异常,无法显示远程相机的画面
解析:此问题存在的原因可能有多种,这里我说下我遇到的情况,1、分布式连接被断开,但是因为底层机制,设备之间下线需要在一段时间内才能上报(预计5分钟),所以在应用层看到可以连接的远端设备,其实已经下线了,这时当然不能切换到远程相机。
2、与问题3中描述的相同,因为添加了一个无法支持的拍照配置信息导致相机被关闭。
解决方案
1、等待线下通知,再重新连接设备,或者等待设备自动完成重连,简单粗暴就是重启设备。
2、待社区反馈
5、相机业务在主线程执行,需要将业务移动到子线程,防止UI线程堵塞
解析:如题描述,目前可能存在堵塞UI线程的可能,需要将一些耗时的操作移动到子线程,比如预览、拍照保存图片等。
目前正在修改优化,关于ets的异步线程worker可以查看之前写的一篇关于:OpenHarmony stage worker 多线程。
6、远程相机预览数据传输存在500ms的延迟
解析:在wifi环境下,被控端相机将预览数据通过软总线传输到主控端显示,有500ms左右的延迟,此问题待排查,具体是那个环境出现的延迟。
7、no permission for function call
解析:用户动态授予:允许不同设备间的数据(ohos.permission.DISTRIBUTED_DATASYNC) 交换权限后,DeviceManager.startDeviceDiscovery()启动发现周边设备总会出现异常,日志中提示:
discoverFail data= {"subscribeId":26386,"reason":-20007,"errInfo":"no permission for function call."}原因:非系统应用无法使用DeviceManager,详细可查看:issues
解决方案:系统应用和普通应用是通过签名来区分,那只要通过修改签名UnsgnedReleasedProfileTemplate.json文件中的app-feature值为ohos_system_app,即为系统应用。
想了解更多关于开源的内容,请访问:
51CTO开源基础软件社区
https://ost.51cto.com
责任编辑:jianghua 来源:51CTO 开源基础软件社区 分布式相机鸿蒙推荐系统
电脑公司Ghost Win8.1 x32 精选纯净版2022年7月(免激活) ISO镜像高速下载
语言:中文版系统大小:2.98GB系统类型:Win8电脑公司Ghost Win8.1x32位纯净版V2022年7月版本集成了自2022流行的各种硬件驱动,首次进入系统即全部硬件已安装完毕。电脑公司Ghost Win8.1x32位纯净版具有更安全、更稳定、更人性化等特点。集成最常用的装机软件,精心挑选的系统维护工具,加上绿茶独有
微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载
语言:中文版系统大小:5.13GB系统类型:Win11微软Win11原版22H2下载_Win11GHOST 免 激活密钥 22H2正式版64位免费下载系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Win11 64位 Office办公版(免费)优化 1、保留 Edge浏览器。 2、隐藏“操作中心”托盘图标。 3、保留常用组件(微软商店,计算器,图片查看器等)。 5、关闭天气资讯。
Win11 21H2 官方正式版下载_Win11 21H2最新系统免激活下载
语言:中文版系统大小:4.75GB系统类型:Win11Ghost Win11 21H2是微软在系统方面技术积累雄厚深耕多年,Ghost Win11 21H2系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。Ghost Win11 21H2是微软最新发布的KB5019961补丁升级而来的最新版的21H2系统,以Windows 11 21H2 22000 1219 专业版为基础进行优化,保持原汁原味,系统流畅稳定,保留常用组件
windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载
语言:中文版系统大小:5.31GB系统类型:Win11windows11中文版镜像 微软win11正式版简体中文GHOST ISO镜像64位系统下载,微软win11发布快大半年了,其中做了很多次补丁和修复一些BUG,比之前的版本有一些功能上的调整,目前已经升级到最新版本的镜像系统,并且优化了自动激活,永久使用。windows11中文版镜像国内镜像下载地址微软windows11正式版镜像 介绍:1、对函数算法进行了一定程度的简化和优化
微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载
语言:中文版系统大小:5.31GB系统类型:Win11微软windows11正式版GHOST ISO镜像 win11下载 国内最新版渠道下载,微软2022年正式推出了win11系统,很多人迫不及待的要体验,本站提供了最新版的微软Windows11正式版系统下载,微软windows11正式版镜像 是一款功能超级强大的装机系统,是微软方面全新推出的装机系统,这款系统可以通过pe直接的完成安装,对此系统感兴趣,想要使用的用户们就快来下载
微软windows11系统下载 微软原版 Ghost win11 X64 正式版ISO镜像文件
语言:中文版系统大小:0MB系统类型:Win11微软Ghost win11 正式版镜像文件是一款由微软方面推出的优秀全新装机系统,这款系统的新功能非常多,用户们能够在这里体验到最富有人性化的设计等,且全新的柔软界面,看起来非常的舒服~微软Ghost win11 正式版镜像文件介绍:1、与各种硬件设备兼容。 更好地完成用户安装并有效地使用。2、稳定使用蓝屏,系统不再兼容,更能享受无缝的系统服务。3、为
雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载
语言:中文版系统大小:4.75GB系统类型:雨林木风Windows11专业版 Ghost Win11官方正式版 (22H2) 系统下载在系统方面技术积累雄厚深耕多年,打造了国内重装系统行业的雨林木风品牌,其系统口碑得到许多人认可,积累了广大的用户群体,雨林木风是一款稳定流畅的系统,一直以来都以用户为中心,是由雨林木风团队推出的Windows11国内镜像版,基于国内用户的习惯,做了系统性能的优化,采用了新的系统
雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO
语言:中文版系统大小:5.91GB系统类型:Win7雨林木风win7旗舰版系统下载 win7 32位旗舰版 GHOST 免激活镜像ISO在系统方面技术积累雄厚深耕多年,加固了系统安全策略,雨林木风win7旗舰版系统在家用办公上跑分表现都是非常优秀,完美的兼容各种硬件和软件,运行环境安全可靠稳定。win7 32位旗舰装机版 v2019 05能够帮助用户们进行系统的一键安装、快速装机等,系统中的内容全面,能够为广大用户
相关文章
- 微信多人视频通话运用办法_微信
- 电脑如何拍照 用电脑摄像头拍照方法【详解】
- Win8系统开始菜单快捷键不能用怎样处理?
- windows7系统输入激活码无效无法激活怎么办
- Win10怎么设置来宾账户权限?Win10设置来宾账户权限步骤方法
- win10平板模式ppt怎么翻页 win10平板模式ppt翻页方法【教程】
- 安装win7系统提示 提示这个怎么办
- win8系统窗口透明化怎样设置?
- WIN8恢复经典开始菜单的操作方法
- office2016激活工具,本文教您如何处理
- Win11系统没有浏览器怎么办?Win11系统找不到浏览器处理方法
- Windows 11 开发者预览版 23493 存多个 bug:弹窗对话框乱飘、下拉菜单变透明
- Win10版本2004系统怎么更新?Windows10更新到2004系统详细图文教程
- Windows 11预览版谷歌Chrome浏览器标题栏已默认启用Mica效果
- win7系统下2345看图王如何去掉弹出的广告窗口
- Win10怎么给文件创建关联?
- QQ钱包怎样充值公交卡_腾讯QQ
- 麦克风设置,本文教您怎样处理麦克风没有声音
热门系统
- 1华硕笔记本&台式机专用系统 GhostWin7 32位正式旗舰版2018年8月(32位)ISO镜像下载
- 2深度技术 Windows 10 x86 企业版 电脑城装机版2018年10月(32位) ISO镜像免费下载
- 3电脑公司 装机专用系统Windows10 x86喜迎国庆 企业版2020年10月(32位) ISO镜像快速下载
- 4雨林木风 Ghost Win7 SP1 装机版 2020年4月(32位) 提供下载
- 5深度技术 Windows 10 x86 企业版 六一节 电脑城装机版 版本1903 2022年6月(32位) ISO镜像免费下载
- 6深度技术 Windows 10 x64 企业版 电脑城装机版2021年1月(64位) 高速下载
- 7新萝卜家园电脑城专用系统 Windows10 x64 企业版2019年10月(64位) ISO镜像免费下载
- 8新萝卜家园 GhostWin7 SP1 最新电脑城极速装机版2018年8月(32位)ISO镜像下载
- 9电脑公司Ghost Win8.1 x32 精选纯净版2022年5月(免激活) ISO镜像高速下载
- 10新萝卜家园Ghost Win8.1 X32 最新纯净版2018年05(自动激活) ISO镜像免费下载
热门文章
常用系统
- 1Windows XP系统安装包下载_深度技术Windows XP SP3稳定专业版下载V2023.07
- 2新雨林木风 Windows10 x86 企业装机版2022年7月(32位) ISO镜像高速下载
- 3深度技术XP纯净版下载_最干净的深度XP SP3精简纯净版系统下载
- 4系统之家Ghost Win10 专业版x64 v2023.03最新系统下载
- 5笔记本专用Win11系统下载_笔记本专用 Win11 64位中文专业版下载
- 6Win10专业版下载_Win10 32位专业版装机速度优化版系统2022.10
- 7戴尔笔记本和台式机专业GhostXP_SP3装机系统 V2011.07 下载
- 8番茄花园Ghost Win8.1 (X32) 中秋特别 纯净版2020年9月(免激活) ISO镜像免费下载
- 9Windows11预览体验计划预览版22621.870下载
- 10雨林木风Ghost Win7 sp1 x86 最新旗舰版系统 v2021.03最新下载